【问题标题】:Why is Main method private?为什么 Main 方法是私有的?
【发布时间】:2011-03-07 19:32:26
【问题描述】:

新的控制台项目模板创建一个 Main 方法,如下所示:

class Program
{
    static void Main(string[] args)
    {
    }
}

为什么Main 方法和Program 类都不需要公开?

【问题讨论】:

  • @jacerhea:没有。class Program 是内部的,Main() 是私有的。
  • “新控制台项目模板”是对 Visual Studio 的引用吗?如果是这样,添加“visual-studio”标签是合适的。
  • @DavidRR 是的,它是对 VS 的引用,但它与问题无关。

标签: c# .net syntax methods


【解决方案1】:

Main 方法不应该被任何人调用。

它实际上在EXE本身中被标记为执行的入口点,因此默认没有外部调用者。

如果您想要,您可以通过标记public 打开它以进行调用,例如如果您要将控制台应用程序转换为 API。

【讨论】:

  • 即使控制台程序的功能应该可以被其他程序集直接调用,但打开Main 通常是个坏主意。公开一个外部程序可以调用的公共 Facade 是更好的设计。 Main 处理命令行参数,然后调用同一个 Facade。
  • @Anders:公平点,但我们只是在谈论可行性,而不是设计。
  • 这应该是选择的答案。
【解决方案2】:

程序的入口点用.entrypoint IL 指令标记。方法或类是否公开并不重要,重要的是这个指令。

【讨论】:

  • 这也意味着您甚至不必调用主方法“Main”。 C# 编译器强制执行此操作,但其他 .net 语言可以使用他们想要的任何内容。
【解决方案3】:

Public 或 Private 关键字在这种情况下没有区别,它完全取决于应用程序的用法和范围。在不同的场景中使用下面提到的关键字。

  1. Public - 如果我们想通过任何外部程序启动入口点,那么您可能需要将其设为公开,以便访问。
  2. 私有 - 如果我们知道应用程序没有外部使用,那么最好将其设为私有,这样外部应用程序就不会访问它。

【讨论】:

    【解决方案4】:

    是的。您可以将main() 方法标记为公共、私有或受保护。如果您想通过任何外部程序启动入口点,那么您可能需要将其公开以便可以访问。如果您知道应用程序没有外部使用,则可以将其标记为私有,那么最好将其设为私有,这样外部应用程序就不会访问它。

    public class MainMethod
    {
        private  static void Main(string[] args)
        {
            Console.WriteLine("Hello World !!");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 2023-03-08
      • 2010-09-09
      • 2014-08-26
      • 2017-07-07
      • 1970-01-01
      • 2011-08-29
      • 2012-12-03
      • 1970-01-01
      相关资源
      最近更新 更多