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

时间:2016-07-17 12:34:19

标签: c# multithreading

假设我有一个多线程控制台应用程序:

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();

    }
}

我的问题是编译器如何知道在哪个委托中使用.. = new Task(..)? 我的意思是编译器如何替换此笔画

 var task = new Task(Method);

用这个

  var action = new Action(Method);
        var task = new Task(action);

1 个答案:

答案 0 :(得分:2)

Action的构造函数接受void方法

new Action(someVoidMethod);

编译器实际生成了这段代码:

Task task = new Task(new Action(Program.Method));

由于传递的void方法没有参数,编译器可以将其转换为Action