CaT*_*aTx 3 c# multithreading delegates declaration
我看到以下声明:
ThreadStart myThreadDelegate = new ThreadStart(Work.DoWork);
Thread myThread = new Thread(myThreadDelegate);
myThread.Start();
Run Code Online (Sandbox Code Playgroud)
他们可以简化如下吗?
Thread myThread = new Thread(new ThreadStart(Work.DoWork));
myThread.Start();
Run Code Online (Sandbox Code Playgroud)
如果是,那么第二种方法是什么?每种方法的优缺点是什么?
它甚至可以简化为:
var myThread = new Thread(Work.DoWork);
myThread.Start();
Run Code Online (Sandbox Code Playgroud)
没有太大的区别.在您的第一个示例中,委托实例获得一个名称,myThreadDelegate理论上可以在该方法中稍后使用(可能是其他内容).
如果一个人喜欢一个含有多个级别的长表达式,或者许多带有temporaray变量的小表达式然后被组合,那么这主要是一个品味问题.
在任何情况下,在我看来,使用方法组的隐式转换比较简单,而Work.DoWork不是写入new ThreadStart(Work.DoWork).看到一句C#2.0提供了编写与先前的声明更简单的方式在如何:声明,实例化和使用委托(C#编程指南).这种更简单的方法正式称为方法组转换.
有关var关键字的信息,请参阅隐式类型的局部变量(C#编程指南).
当然,你的例子中的终极单行将是:
(new Thread(Work.DoWork)).Start();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您甚至没有获得对新线程的引用(变量)(实例方法Start()返回void).
是.它没有被称为任何东西,没有任何利弊.您可以使用额外的C#语法糖:
Thread myThread = new Thread(Work.DoWork);
myThread.Start();
Run Code Online (Sandbox Code Playgroud)
它会自动推断您要创建ThreadStart委托对象.
| 归档时间: |
|
| 查看次数: |
1223 次 |
| 最近记录: |