为什么Main方法是私有的?

66

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

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

为什么Main方法和Program类都不需要是公共的?


6
不行。class Program 是内部的,Main() 是私有的。 - H H
2
“New console project template”是指Visual Studio吗?如果是,添加“visual-studio”标签会更合适。 - DavidRR
1
@DavidRR 是的,它是对VS的引用,但与问题无关。 - František Žiačik
4个回答

60

一个程序的入口点通过.entrypoint IL指令进行标记。无论方法或类是否为公共,都只有这个指令才是重要的。


18
这也意味着你甚至不必将主方法命名为"Main"。C# 编译器会强制执行该规定,但其他 .net 语言则可以使用任何名称。 - Michael Stum

30

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

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

如果你想要,可以将它标记为public以便于被调用,例如当你将控制台应用转换成API时。


3
即使控制台程序的功能可以被其他程序集直接调用,打开 Main 通常也是一个不好的想法。更好的设计是公开一个外部程序可以调用的公共门面(Facade)。Main 处理命令行参数,然后调用同一门面。 - Anders Abel
2
@Anders:说得很有道理,但我们只是在谈论可行性,而不是设计。 - John Gietzen
这应该是被选中的答案。 - mins

2

是的。您可以将main()方法标记为public、private或protected。如果您希望通过任何外部程序启动入口点,则可能需要将其标记为public,以便访问。如果您知道应用程序没有外部使用,则最好将其标记为private,以便外部应用程序无法访问它。

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

默认情况下,类成员是私有的,因此在这种情况下不需要使用“private”访问修饰符。 - MadJoRR

0

在这种情况下,公共或私有关键字并没有区别,它完全取决于应用程序的使用和范围。在不同的场景中使用以下关键字。

  1. 公共 - 如果我们想要由任何外部程序启动入口点,则可能需要将其公开以使其可访问。
  2. 私有 - 如果我们知道应用程序没有外部使用,则最好将其设置为私有,以便没有外部应用程序可以访问它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接