gpt4 book ai didi

c# - 为什么 MSDN 站点比较使用委托(delegate)和接口(interface)?

转载 作者:太空宇宙 更新时间:2023-11-03 19:32:40 24 4
gpt4 key购买 nike

MSDN 站点对使用委托(delegate)而不是接口(interface)进行了比较,但是是什么让这两种语言级别的构造如此相似以至于可以在另一个之上使用呢?他们似乎在做完全不同的事情?

谢谢

最佳答案

可以将委托(delegate)视为等同于具有单一方法的接口(interface)。在不支持委托(delegate)的语言中,通常使用委托(delegate)的模式通常使用接口(interface)来编写。

例如,Java 使用anonymous inner classes实现通常在 C# 中使用匿名委托(delegate)/lambda 表达式的接口(interface):

Java:

// anonymous inner class that implements an interface
Runnable runnable = new Runnable()
{
public void run()
{
System.out.println("Hello world");
}
});

Thread thread = new Thread(runnable);

C#:

// lambda expression convertible to a delegate-type
ThreadStart ts = () => Console.WriteLine("Hello world");

Thread thread = new Thread(ts);

在这两种情况下,目的都是为线程提供入口点。一种方法使用接口(interface),另一种方法使用委托(delegate),但如果您忽略“管道”,很明显接口(interface)与委托(delegate)的目的相同。请注意,使用 lambda 表达式来表达此想法的可用性并非是代表所独有的。 Project Lambda对于 Java,除其他外,尝试将“适当类型的函数转换为仅声明一个方法的接口(interface)或抽象类的匿名实例”。这可能最终允许使用与 C# 版本相同的简洁语法,但不一定需要委托(delegate)类型。

即使在 .NET 框架内,接口(interface)类型和委托(delegate)类型之间也存在等价关系,例如 Comparison<T> IComparer<T> .

编辑:更新代码并使区别更清晰。

关于c# - 为什么 MSDN 站点比较使用委托(delegate)和接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com