好的,假设您在某个类中定义了一个委托(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/