C# 委托(delegate)实例化与仅传递方法引用

标签 c# .net methods delegates instantiation

这个问题在这里已经有了答案:





Difference between wiring events with and without "new"

(6 个回答)



What is the difference between Events with Delegate Handlers and those without? [duplicate]

(4 个回答)


9 个月前关闭。




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

为什么:

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(方法组转换)。

I have a simple question: what's the advantage of instantiating a C# delegate as opposed to just passing the function reference?



所以,这里只是对术语的更正。和
class MyObject {
    public void SomeMethod() { }
}

MyObject someObject = new MyObject();
someObject.SomeMethod 所表示的东西是一个方法组。您可以将其视为可以使用符号 someObject.SomeMethod 查找的重载方法集。 .

关于C# 委托(delegate)实例化与仅传递方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181282/

相关文章:

asp.net - 将 MVC 2 项目升级到 MVC 5

c# - 如何告诉一个类应该创建哪些对象?类型与对象混淆 :(

c# - 如何保持 SqlConnection 始终打开

c# - 通过 .NET 使用 PL/SQL 集合类型参数调用 Oracle 过程

c# - 将通用 Windows C# 类库引用添加到通用 Windows C++ DLL 项目 Visual Studio 2015

java - 如何将用户输入行从输入文件打印到输出文件

java - 方法引用 Static - 小程序示例给建议

c# - 当我更新我的 ObservableCollection 时 GUI 卡住

.net - 如何检查已经在 c#.net 中运行的 exe?

C# - 获取最近创建的文件名