编译器如何知道委托的类型是什么

本文关键字:类型 是什么 何知道 编译器 | 更新日期: 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