C# 包含Main方法的类的含义

C# 包含Main方法的类的含义,c#,C#,如果Main方法是在静态类或非静态类中定义的,或者该类是公共类还是非公共类,以及Main方法是公共类还是非公共类,有什么区别吗?没有,这一点都不重要。没有。唯一的条件是它不能是泛型类型。根据C#4规范第3.1节: 应用程序入口点可能不在泛型类声明中 我怀疑这还打算包括泛型结构声明,因为它们会以同样的方式失败。(CLR不知道要提供什么类型的参数。) 入口点类型可以是嵌套的、静态的、任何可访问性等。方法本身也可以是私有的,只要它具有适当的返回类型(void或int)和适当的参数(none或strin

如果
Main
方法是在静态类或非静态类中定义的,或者该类是公共类还是非公共类,以及
Main
方法是公共类还是非公共类,有什么区别吗?

没有,这一点都不重要。

没有。唯一的条件是它不能是泛型类型。根据C#4规范第3.1节:

应用程序入口点可能不在泛型类声明中

我怀疑这还打算包括泛型结构声明,因为它们会以同样的方式失败。(CLR不知道要提供什么类型的参数。)

入口点类型可以是嵌套的、静态的、任何可访问性等。方法本身也可以是私有的,只要它具有适当的返回类型(
void
int
)和适当的参数(none或
string[]
),当然它必须是静态的

Main在类或结构中声明。Main必须是静态的,不应该是公共的。(…)封闭类或结构不要求是静态的

但不完全清楚为什么它不应该公开。(在Java中,它必须是公共的)


类/结构的可访问性并不重要。

CLR实际上并不介意您的方法是私有的还是公共的。它不会通过使用普通的C代码来调用它。请阅读更多。

由于.NET中的一个奇怪元素,使得主功能的安全性实际上非常重要

在.NET语言中,您可以作为库链接到可执行文件!这意味着,如果在
控制台应用程序4
中,我定义了完整的程序:

    namespace ConsoleApplication4
    {
        public class Program
        {
            public static int Foo(int a, int b)
            {
                return a + b;
            }
            public static void Main(string[] args)
            {

            }
        }
    }
然后我可以在另一个项目中引用ConsoleApplication4,并执行以下操作:

    namespace UsedExecutableAsLibrary
    {
        class Program
        {
            static void Main(string[] args)
            {
                ConsoleApplication4.Program.Foo(10, 20);
                ConsoleApplication4.Program.Main(args);
            }
        }
    }

但是,如果我将
ConsoleApplication4.Program
private或
Program
private中的任何函数设置为private,则编译后将无法再访问它们。你想要什么样的行为完全取决于你自己,但通常你想对其他人隐藏你程序中有趣的部分,所以你将main设置为private。

与什么有区别吗?可能重复我认为它不应该公开的说法很奇怪。没有人抱怨它是公开的,如果您想公开入口点以便以编程方式调用相同的代码,那么将其公开是有意义的。@Jon:可能是“必须”和“应该”的使用解释了这一点。MSDN的人即使不是那么友好,也很精确。是的,我也觉得这有点奇怪。我一直在寻找背后的原因,但还没有找到任何东西。这个答案仍然不能回答所问的问题。您已经回答了三个问题中的一个。入口点所在的类需要是静态的还是非静态的,以及该类的可访问性是否重要?另外,这个问题没有问这个方法是否需要是静态的;很明显,OP知道它必须是静态的。@dotNET:不太清楚,因为没有迹象表明它为什么“不应该”公开。好处是什么?他的问题是关于定义了
Main
class程序。而且,它可能是公开的。这与这里的其他人有什么不同?另外,你还没有回答OP提出的所有三个问题。我将删除它,因为它不是超级专业的,但是有很多人说“这不重要”…但它确实重要!四个人中有一个人说这没关系。一个说你可以这样做,但应该将其私有化,一个说CLR不在乎(这是100%正确的),这意味着你应该使用任何适合你的案例的可访问性,而不是被迫使用,一个人明确地说,你应该在你的程序上下文中使用任何合适的可访问性。(你是否希望其他人能够调用该方法?)