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

Jro*_*rop 10 .net c# methods delegates instantiation

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

为什么:

Thread t = new Thread(new ThreadStart(SomeObject.SomeMethod));
Run Code Online (Sandbox Code Playgroud)

当你能做到:

Thread t = new Thread(SomeObject.SomeMethod);
Run Code Online (Sandbox Code Playgroud)

两者都会根据我的经验编译和工作......我错过了什么?

jas*_*son 6

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

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

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

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

class MyObject {
    public void SomeMethod() { }
}

MyObject someObject = new MyObject();
Run Code Online (Sandbox Code Playgroud)

表示的someObject.SomeMethod是方法组.您可以将其视为可以使用表示法查找重载方法的集合someObject.SomeMethod.