gpt4 book ai didi

c# - vNext 选择进入的主要方法

转载 作者:太空狗 更新时间:2023-10-30 01:03:38 27 4
gpt4 key购买 nike

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

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

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

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

我的问题是当我有两个 Mains 时:

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

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

现在,如果我在代码中切换方法的顺序,我的带参数的 Main 就会被命中。如果我删除参数,我的带参数的 Main 仍然命中,打印 main with args

我想澄清一下 Roslyn 如何准确地选择我的 Main。它总是第一个吗?我确定这已记录在案,但我找不到。

编辑

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

最佳答案

你的猜测完全正确。 K 运行时的相关代码是 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# - vNext 选择进入的主要方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27385928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com