包含Main方法的类的含义

本文关键字:包含 方法 Main | 更新日期: 2023-09-27 18:08:17

Main方法定义在静态类或非静态类中,或者该类是否公开,Main方法是否公开,是否有区别?

包含Main方法的类的含义

No。唯一的条件是它不能是泛型类型。c# 4规范第3.1节:

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

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

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

不,没关系。

根据MSDN:

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

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

类/结构的可访问性无关紧要

CLR实际上并不介意你的方法是私有的还是公共的。它不会通过使用普通的c#代码来调用它。

. net的一个奇怪元素使得Main函数的安全性实际上非常重要。

在。net语言中,你可以链接到一个可执行文件作为库!这意味着,如果在ConsoleApplication4中定义了完整的程序:

    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设置为私有,或者将Program中的任何函数设置为私有,则编译后它们将不再可访问。您想要的行为完全取决于您,但通常您希望对其他人隐藏程序的有趣部分,因此您将main设为private。