c# - 为什么使用 "new DelegateType(Delegate)"?

标签 c# delegates

好的,假设您在某个类中定义了一个委托(delegate)。

public delegate void StringDelegate (string s);

另一个类实现了一个方法:

public static void StringWriter (string s) {...}

在我正在阅读的“C# 编程”第 4 版一书中,他们使用 new 关键字创建委托(delegate),例如:

ClassDelegate.StringDelegate writer;
writer = new ClassDelegate.StringDelegate (DelegateImplementer.StringWriter);
writer("Hello");

但是,我看到也可以这样调用委托(delegate)方法

ClassDelegate.StringDelegate writer;
writer = DelegateImplementer.StringWriter;
writer ("Hello");

有什么区别?当我可以简单地传递或引用方法委托(delegate)的签名时,为什么我要实例化和创建对象委托(delegate)。

最佳答案

两种说法完全没有区别。 writer = DelegateImplementer.StringWriter; 仍然创建一个 delegate 对象;编译器将为您生成 new ClassDelegate.StringDelegate ()。这只是一个更清晰的语法 added in C# 2.0 .

正如@Ben Voigt 在他的回答中提到的那样,只有在 C# 2.0 中才需要编译器在使用 Control.Invoke() 时无法推断出委托(delegate)的类型。例如。

关于c# - 为什么使用 "new DelegateType(Delegate)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7735159/

相关文章:

iOS:不会调用委托(delegate)回调

iphone - 检测何时推送 Viewcontroller

c# - 进程无法访问该文件,因为它正被另一个进程使用

C# 链接参数函数调用

ios - View Controller 值传递

c# - 将 C 编写的 DLL 调用到 C# 时,vshost32-clr2.exe 出错

ios - 委托(delegate)返回零

c# - C# 中的生成器?

c# - DetailsView 的事件 "ItemUpdating"中的 OldValues 集合始终为空

c# - 以编程方式向 ListView 发送点击消息以选择/取消选择项目