繁体   English   中英

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

[英]How does compiler knows what is the type of a delegate?

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

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

Action的构造函数接受void方法

new Action(someVoidMethod);

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM