【问题标题】:Can I determine my own entry point method for C# [duplicate]我可以确定我自己的 C# 入口点方法吗[重复]
【发布时间】:2016-08-05 14:51:15
【问题描述】:

我写了一个程序,它有两个主要方法。我用命令提示符指定入口点。

class Program
{
    static void Main()
    {
        Console.WriteLine("Test");
    }
}
class Test
{
    static void Main()
    {
        Console.WriteLine("Test");
    }
}

csc Program.cs /main:Test

嗯。我可以使用命令提示符确定入口点方法吗?

例如

class Program
{
    static void NewEntry()
    {
        Console.WriteLine("Test");
    }
}

然后

csc Program.cs 入口/Program::NewEntry()

这可能吗?

【问题讨论】:

  • 它必须是一个名为MainAFAIK的静态函数。
  • 我相信你不能这样做。入口点由 .NET 框架定义,它是 ConsoleApplications 上的 Main()
  • 同意@LucasTrzesniewski 但我真正想知道的是..为什么你甚至需要这样做?我的意思是好奇心是一回事,但我想知道你是否真的需要它。
  • 我使用了中间语言。而且 IL 有 .entrypoint 元数据。我问这个问题是因为 C# 编译器可能有这个选项。我想确保编译器没有这个选项。
  • 也可以是静态 int Main :) 但我的问题只是“我可以定义一个没有命名为“Main”的入口点方法吗?例如,我想为入口点方法使用“MyMain”。跨度>

标签: c# entry-point


【解决方案1】:

" 当一个程序启动时,它会寻找一个入口点。这就是 Main() 方法的作用。事实上,一个程序,即一个可执行程序,从 Main() 开始和停止方法。它的工作方式是,一开始,编译器会查找一个名为 Main 的方法。如果没有找到,则会产生错误。如果找到,则进入 Main() 方法“

查看此文档

http://www.functionx.com/csharp2/topics/main.htm

【讨论】:

    【解决方案2】:

    有点。主入口点必须是static Main()。但是,如果您的程序中有多个static Main(),您可以指定使用哪个类。

    请参阅Main Entry Point or Statup Object 上的 csc/msbuild 文档

    在您的示例中,这将是 csc -main:MyProject.Program Program.cs 其中MyProject.Program 是入口点类的完整命名空间和名称。 msbuild 也有类似的标志。

    如果您希望在每次运行程序时动态选择一个入口点,您可能希望将该选项作为命令行参数传递给单个 Main(string[] args),然后从那里分支。

    【讨论】:

      【解决方案3】:

      没有。 static Main() 是 C# 的唯一入口点,所有其他函数都应从中调用。

      【讨论】:

      • 我认为你是对的。但你能证明这个案例吗?因为我想确定。 MSIL 语言有这个入口点选项。也许 csharp 必须?如果我们不能确定自己的入口点方法,为什么? msil 有这个选项。为什么 C# 编译器没有?当然没有必要,但这是唯一的原因吗?为什么 MSIL 需要这个而 csharp 不需要?希望你能理解我的意思。
      • @Cevizli C# 强制这样做是因为 C# 语言规范这样说(入口点 必须 命名为 Main),因此编译器强制执行此操作。 CLR 可能能够使用其他入口点,但 C# 语言规定了这一点。
      猜你喜欢
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多