好吧,假设您在某个类中定义了一个委托。
public delegate void StringDelegate (string s);
另一个类实现了一个方法:
public static void StringWriter (string s) {...}
在我正在阅读的《Programming C#》第四版中,他们使用new关键字,例如:
ClassDelegate.StringDelegate writer;
writer = new ClassDelegate.StringDelegate (DelegateImplementer.StringWriter);
writer("Hello");
但是,我发现也可以通过这种方式调用委托方法
ClassDelegate.StringDelegate writer;
writer = DelegateImplementer.StringWriter;
writer ("Hello");
有什么不同?当我可以简单地传递或引用方法委托的签名时,为什么我要实例化并创建对象委托。
这两种说法完全没有区别。writer = DelegateImplementer.StringWriter;
仍然创建一个delegate
目的;编译器将生成new ClassDelegate.StringDelegate ()
为你。这只是一个更清晰的语法C# 2.0 中添加 http://msdn.microsoft.com/en-us/library/ms173176%28v=vs.80%29.aspx.
正如 @Ben Voigt 在他的回答中提到的那样,仅在 C# 2.0 中需要,其中编译器无法推断委托的类型,当使用控制.调用() http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx例如。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)