C#委托实例化与仅传递方法参考
我有一个简单的问题:实例化C#委托与仅传递函数引用相比有什么好处? 我的意思是:
为什么:
Thread t = new Thread(new ThreadStart(SomeObject.SomeMethod));
当你能做到:
Thread t = new Thread(SomeObject.SomeMethod);
两者都会按照我的经验编译和工作……我错过了什么?
只要方法组SomeObject.SomeMethod
有一个返回类型为void
且不带参数的方法就没有区别。 这是因为ThreadStart
被定义为一个返回void
并且不带参数的delegate
,因此从方法组SomeObject.SomeMethod
到ThreadStart
的隐式转换。 因此,两者都调用Thread
构造函数的重载Thread(ThreadStart)
。
语言规范的相关部分是§6.6(方法组转换)。
我有一个简单的问题:实例化C#委托与仅传递函数引用相比有什么好处?
所以,这里只是修改术语。 同
class MyObject { public void SomeMethod() { } } MyObject someObject = new MyObject();
someObject.SomeMethod
表示的东西是一个方法组。 您可以将其视为可以使用符号someObject.SomeMethod
查找重载方法的集合。
编译器将推断当您键入较短的代码时,您的意思是代码较长。 最终效果没有区别。 如果你想要完整构造函数的清晰度,你可以把它放进去; 如果您只想要方法组的简洁,则可以允许编译器推断构造函数。 这只是一种风格选择。
这相当于。 关于这个主题的好的介绍性文章: C#代表,匿名方法和Lambda表达式 – 我的!