可能的重复:
new Thread(void Target()) 和 new Thread(new ThreadStart(void Target())) 有什么区别? https://stackoverflow.com/questions/10482121/what-is-the-difference-between-new-threadvoid-target-and-new-threadnew-thre
我有一个关于 Thread 类的小问题。该类有 4 个构造函数:
public Thread(ParameterizedThreadStart start);
public Thread(ThreadStart start);
public Thread(ParameterizedThreadStart start, int maxStackSize);
public Thread(ThreadStart start, int maxStackSize);
我使用第二个构造函数创建一个 Thread 对象:
Thread thread = new Thread(new ThreadStart(ScanDirectory));
但是,我可以使用一种方法来创建此对象,而无需使用上面讨论的任何构造函数。
Thread thread = new Thread(ScanDirectory);
在这种情况下,ScanDirectory 是一个 void 方法,它不是 ThreadStart 或 ParameterizedThreadStart,但 Thread 类仍然接受此构造函数。为什么?
我认为这是一个.NET 功能,但我不知道它是如何实现的。
Note:ScanDirectory 是一个 void 方法。
在这里区分两件事很重要:
- 致电给
Thread
构造函数
- 创建代表pass to the
Thread
构造函数
You're really对这里的后者感兴趣 - 之间的区别:
ThreadStart tmp = new ThreadStart(ScanDirectory);
and
ThreadStart tmp = ScanDirectory;
其中第二个是方法组转换- 从 a 的隐式转换方法组(方法的名称,如果是实例方法,则可能由实例值限定)具有兼容签名的委托。
您很少需要第一种形式的“显式”委托创建表达式,因为方法组转换是在 C# 2 中引入的。不幸的是,您会看到很多代码仍然使用它,因为许多开发人员不知道方法组转换 - IIRC Visual Studio 设计者仍然使用该形式进行事件处理程序订阅。
您真正需要它的唯一一次是当方法组转换最终不明确时。例如:
static void Main()
{
// Valid: uses parameterless overload
new Thread(new ThreadStart(Foo));
// Valid: uses parameterized overload
new Thread(new ParameterizedThreadStart(Foo));
// Invalid, as there are two valid constructor overloads
new Thread(Foo);
}
static void Foo()
{
}
static void Foo(object state)
{
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)