【问题标题】:What is the use of multiple main methods?多个主要方法有什么用?
【发布时间】:2011-01-16 09:35:22
【问题描述】:

c# 使我们能够使用该方法定义多个类。 Main 方法是程序执行的入口点。那么为什么我们要为程序执行提供不止一个地方。多主方法比单主方法有什么优势。

编辑:

Example.cs

Class Example_1
{
 public static void Main()
  {
   System.Console.WriteLine("Example 1")
  }

 public void test()
  {
   System.Console.WriteLine("Test method")
  }
}

Class Example_2
{
 public static void Main()
  {
   System.Console.WriteLine("Example 2")
  }
}

如果我输入“csc Example.cs”,会发生什么? 如果我想在Class Example_2中继承Class Example_1的测试方法怎么办。这段代码可以工作吗?

Example_1 abc = new Example_1();
abc.test();

【问题讨论】:

    标签: c#


    【解决方案1】:

    您可以使用它,以便不同的构建配置构建相同的可执行文件但具有不同的入口点 - 例如控制台入口点与 WinForms 入口点。

    我个人在演讲和深度 C# 的示例代码中使用它。每个文件都是一个独立的示例,但只有一个入口点会更简单——因此入口点使用一个实用程序类来提示用户他们想要运行哪个示例。

    【讨论】:

    • 你如何告诉编译器/链接器 Main 方法中的哪个是入口点?通过 VS.NET 项目配置中的“启动对象”设置?
    • 如何选择在其元数据中实际使用.entrypoint 标记的方法?我一直在寻找一些EntryPointAttribute,但只找到了对 F# 的引用。我从未尝试在 C# 中实现它,并认为这只是命名约定的问题,这确实不是最好的方法。
    • @Uwe: @Ondrej: 通过项目属性或 /main: 命令行开关。
    • 假设我有 A 类和 B 类的主方法。如果我在命令行中键入“csc Example.cs”,哪一个将用作默认方法
    • @subbanki:它会给你一个错误。正如我之前所说,您需要使用 /main: 命令行开关。
    【解决方案2】:

    首先,如果您有多个 main 方法,您可以指定编译器使用哪个作为应用程序的入口点。

    多种主要方法可用于测试目的。也许您正在开发像文本编辑器这样的 Windows 应用程序。例如,如果您正在处理语法突出显示之类的事情,您可以有一个额外的 main 方法来启动 GUI、加载测试文件并启用适当的语法突出显示。 另一个示例可以是一个应用程序,该应用程序将被编译为仅用于控制台使用,或者作为一个包含两个不同类和主要方法的 Windows 应用程序。

    【讨论】:

    • 你不能用 Main 方法参数和/或条件编译符号来达到同样的效果吗?
    • @tenor -- 当然可以,我就是这样做的(出于测试目的,我使用预处理器方向,而对于 gui 切换,我使用参数)。 @Cody Gray -- 我不确定你的意思..?
    【解决方案3】:

    C# 程序中只能有一个入口点。如果您有多个具有 Main 方法的类,则必须使用 /main 编译器选项来编译程序,以指定将哪个 Main 方法用作入口点。

    编译t2.cs和t3.cs,指定Main方法会像这样在Test2中找到,

    csc t2.cs t3.cs /main:Test2

    【讨论】:

      【解决方案4】:

      您可以在不同的类中拥有多个名为 Main() 的方法。但只有其中一个用于启动程序。这只是正常的方法,您可以根据需要使用其他 Main。 (但不推荐。)

      【讨论】:

        【解决方案5】:

        这可能很少见,但我想如果你必须链接到一些具有 Main() 方法的外部代码,那么你会想告诉编译器使用你的。

        【讨论】:

        • 如果你要链接到包含 Main 方法的程序集,你不需要告诉编译器任何事情......第三方 Main 方法不会在你的程序集中,所以不会有歧义。
        • 如果你链接到一个网络模块,我会很好奇你是否会有这种歧义。
        【解决方案6】:

        为什么不能使用 Main 方法创建多个类?毕竟,Main 只是方法的名称。如果你创建了一个类,那么在其中定义一个名为 Main 的方法是完全可以的。

        【讨论】:

          【解决方案7】:

          当你使用 Visual Studio CMD 提示时

          然后尝试执行如下:

          csc filename.cs /main:classname
          

          其中 filename 是存储代码的文件的名称,classname 是包含我们希望作为入口点的 Main 的类的名称。

          在给定的程序中,有两个类 A 和 B,其中每个类都包含一个 Main 方法。我们可以写成

          csc filename.cs /main:A [用于 A 类主执行] 或者,

          csc filename.cs /main:B [用于 B 类主执行]

          【讨论】:

          • 问题是为什么而不是怎么做。
          猜你喜欢
          • 2017-02-21
          • 2019-07-04
          • 2015-06-07
          • 1970-01-01
          • 1970-01-01
          • 2014-04-23
          • 2016-09-22
          • 2019-10-08
          • 2019-04-19
          相关资源
          最近更新 更多