C#委托实例化与仅传递方法参考

我有一个简单的问题:实例化C#委托与仅传递函数引用相比有什么好处? 我的意思是:

为什么:

Thread t = new Thread(new ThreadStart(SomeObject.SomeMethod)); 

当你能做到:

 Thread t = new Thread(SomeObject.SomeMethod); 

两者都会按照我的经验编译和工作……我错过了什么?

只要方法组SomeObject.SomeMethod有一个返回类型为void且不带参数的方法就没有区别。 这是因为ThreadStart被定义为一个返回void并且不带参数的delegate ,因此从方法组SomeObject.SomeMethodThreadStart的隐式转换。 因此,两者都调用Thread构造函数的重载Thread(ThreadStart)

语言规范的相关部分是§6.6(方法组转换)。

我有一个简单的问题:实例化C#委托与仅传递函数引用相比有什么好处?

所以,这里只是修改术语。 同

 class MyObject { public void SomeMethod() { } } MyObject someObject = new MyObject(); 

someObject.SomeMethod表示的东西是一个方法组。 您可以将其视为可以使用符号someObject.SomeMethod查找重载方法的集合。

编译器将推断当您键入较短的代码时,您的意思是代码较长。 最终效果没有区别。 如果你想要完整构造函数的清晰度,你可以把它放进去; 如果您只想要方法组的简洁,则可以允许编译器推断构造函数。 这只是一种风格选择。

这相当于。 关于这个主题的好的介绍性文章: C#代表,匿名方法和Lambda表达式 – 我的!