C#委托实例化与刚好路过方法参考C#委托实例化与刚好路过方法参考(C# Delegate Insta

2019-05-12 08:28发布

我有一个简单的问题:什么是实例化一个C#的委托,而不是仅仅传递函数引用的优势在哪里? 我的意思是:

为什么:

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

当你可以这样做:

Thread t = new Thread(SomeObject.SomeMethod);

双方将编译并在我的经验工作...我这么想吗?

Answer 1:

只要方法组SomeObject.SomeMethod具有返回类型的方法void和不采取任何参数没有差别。 这是因为ThreadStart被定义为delegate返回void和不带参数,因此存在来自该方法组的隐式转换SomeObject.SomeMethodThreadStart 。 因此,两者都调用过载Thread(ThreadStart)所述的Thread构造。

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

我有一个简单的问题:什么是实例化一个C#的委托,而不是仅仅传递函数引用的优势在哪里?

所以,只是一个术语的修正在这里。 同

class MyObject {
    public void SomeMethod() { }
}

MyObject someObject = new MyObject();

由表示的事情someObject.SomeMethod是方法组。 你可以只把它看作一组重载方法可以使用符号,它抬起头someObject.SomeMethod



Answer 2:

编译器会推断出,当你输入的代码越短,你的意思是较长的代码。 有没有在最终效果没有差异。 如果你想充分构造的清晰度,你可以把它放在; 如果你只想在方法组的简洁,可以让编译器来推断构造。 这只是一个风格上的选择。



Answer 3:

这是等价的。 良好的介绍性文章的主题: C#委托,匿名方法和Lambda表达式- O我!



文章来源: C# Delegate Instantiation vs. Just Passing the Method Reference