我有一个简单的问题:什么是实例化一个C#的委托,而不是仅仅传递函数引用的优势在哪里? 我的意思是:
为什么:
Thread t = new Thread(new ThreadStart(SomeObject.SomeMethod));
当你可以这样做:
Thread t = new Thread(SomeObject.SomeMethod);
双方将编译并在我的经验工作...我这么想吗?
我有一个简单的问题:什么是实例化一个C#的委托,而不是仅仅传递函数引用的优势在哪里? 我的意思是:
为什么:
Thread t = new Thread(new ThreadStart(SomeObject.SomeMethod));
当你可以这样做:
Thread t = new Thread(SomeObject.SomeMethod);
双方将编译并在我的经验工作...我这么想吗?
只要方法组SomeObject.SomeMethod
具有返回类型的方法void
和不采取任何参数没有差别。 这是因为ThreadStart
被定义为delegate
返回void
和不带参数,因此存在来自该方法组的隐式转换SomeObject.SomeMethod
到ThreadStart
。 因此,两者都调用过载Thread(ThreadStart)
所述的Thread
构造。
语言规范的相关部分是6.6节(方法组转换)。
我有一个简单的问题:什么是实例化一个C#的委托,而不是仅仅传递函数引用的优势在哪里?
所以,只是一个术语的修正在这里。 同
class MyObject {
public void SomeMethod() { }
}
MyObject someObject = new MyObject();
由表示的事情someObject.SomeMethod
是方法组。 你可以只把它看作一组重载方法可以使用符号,它抬起头someObject.SomeMethod
。
编译器会推断出,当你输入的代码越短,你的意思是较长的代码。 有没有在最终效果没有差异。 如果你想充分构造的清晰度,你可以把它放在; 如果你只想在方法组的简洁,可以让编译器来推断构造。 这只是一个风格上的选择。
这是等价的。 良好的介绍性文章的主题: C#委托,匿名方法和Lambda表达式- O我!