编程语言
首页 > 编程语言> > c# – vNext选择输入的主要方法

c# – vNext选择输入的主要方法

作者:互联网

我没有看到任何相关的文档,但是看起来在vNext中,您可以愉快地使用非静态方法void Main()编译和运行应用程序.实际上,新的控制台应用程序模板为您提供了非静态主菜单.例如:

public class Program
{
    public Guid MyGuid { get; set; } = Guid.NewGuid();

    void Main()
    {
        Console.WriteLine("Hello World {0}", MyGuid);
        Console.ReadLine();
    }
}

MyGuid是实例化的,在这里是一个非空的Guid.所以我假设它创建了一个我的Program类的实例并从那里开始.

我的问题是当我有两个主电源时:

public class Program
{
    void Main()
    {
        Console.WriteLine("main no args");
        Console.ReadLine();
    }

    void Main(string[] args)
    {
        Console.WriteLine("main with args {0}", string.Join(", ",args));
        Console.ReadLine();
    }
}

在项目属性中,我给出了参数arg1和arg2.但是,当我运行它时,我的控制台显示主要没有args.如果我删除无参数的Main,我会得到args arg1,arg2的预期输出main.

现在,如果我在代码中切换方法的顺序,那么我的Main with arguments就会被命中.如果我删除了参数,我的Main with arguments仍会被命中,用args打印main.

我想澄清Roslyn如何正确地选择我的Main.它总是第一个吗?我确信这是记录在案的,但我找不到它.

编辑

如果我将我的类名改为Program之外的东西,我的控制台应用程序会运行,并立即崩溃告诉我没有合适的入口点.所以我最好的猜测是Program类中的第一个Main方法

解决方法:

你的猜测绝对正确. K Runtime的相关代码是here.

实质上,如果您没有静态main方法,运行时将查找具有一个或多个Main方法的名为“Program”的类型,实例化它并调用第一个方法.

这也在here上提到:

Then, a class named Program is searched for, and a Main method is looked up. If the Main method is static, it’s invoked as is, otherwise an instance of Program is created using the DI, and Main is invoked on the instance. At this point our program is run.

标签:c,visual-studio-2015,c-6-0
来源: https://codeday.me/bug/20190609/1206578.html