为什么要使用"new DelegateType(Delegate)"?

use*_*692 8 c# delegates

好的,假设你在某个类中定义了一个委托.

public delegate void StringDelegate (string s);
Run Code Online (Sandbox Code Playgroud)

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

public static void StringWriter (string s) {...}
Run Code Online (Sandbox Code Playgroud)

在我正在阅读"Programming C#"第4版的书中,他们使用new关键字创建委托,例如:

ClassDelegate.StringDelegate writer;
writer = new ClassDelegate.StringDelegate (DelegateImplementer.StringWriter);
writer("Hello");
Run Code Online (Sandbox Code Playgroud)

但是,我看到也可以通过这种方式调用委托方法

ClassDelegate.StringDelegate writer;
writer = DelegateImplementer.StringWriter;
writer ("Hello");
Run Code Online (Sandbox Code Playgroud)

有什么不同?当我只是简单地传递或引用方法委托的签名时,为什么我想要实例化并创建一个对象委托.

shf*_*301 6

这两个陈述完全没有区别. writer = DelegateImplementer.StringWriter;仍然创造一个delegate对象; 编译器会new ClassDelegate.StringDelegate ()为你生成.它只是在C#2.0中添加的更清晰的语法.

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