编译器如何知道委托的类型是什么
本文关键字:类型 是什么 何知道 编译器 | 更新日期: 2023-09-27 17:57:24
假设我有一个多线程控制台应用程序:
class Program
{
private static void Method()
{
Console.WriteLine("Method() started");
for (var i = 0; i < 20; i++)
{
Console.WriteLine($"Counter = {i}");
Thread.Sleep(500);
}
Console.WriteLine("Method() finished");
}
static void Main(string[] args)
{
Console.WriteLine("Main Started");
var task = new Task(Method);
task.Start();
for (var i = 0; i < 60; i++)
{
Console.Write(".");
Thread.Sleep(100);
}
Console.WriteLine("Main finished");
Console.ReadLine();
}
}
我的问题是编译器如何知道在 ..= 新任务(..)?我的意思是编译器如何替换此笔画
var task = new Task(Method);
有了这个
var action = new Action(Method);
var task = new Task(action);
Action 的构造函数接受 void 方法
new Action(someVoidMethod);
编译器实际上生成了以下代码:
Task task = new Task(new Action(Program.Method));
由于您传递了一个没有参数的 void 方法,因此编译器可以将其转换为 Action
。