【问题标题】:What is the difference between public static void Main() and private static void Main() in a C# console application?C# 控制台应用程序中的 public static void Main() 和 private static void Main() 有什么区别?
【发布时间】:2014-02-19 04:33:20
【问题描述】:

有什么区别

public static void Main()

private static void Main()

在 C# 控制台应用程序中?特别是与Main() 方法有关(我了解publicprivate 之间的区别)。

【问题讨论】:

  • 不是答案,但请注意,Microsoft 强烈建议您不要将 Main() 公开(部分原因是它没有什么意义)
  • 我赞成public。它不应该是“private”,因为理论上操作系统是从类外调用它的。我们这些有 C 背景的人也反对将 main 函数作为方法,但这是另一个问题。

标签: c# console-application


【解决方案1】:

要充当应用程序的起点,Main 方法不必是 public

如果您确实决定将其设为public,则可以从其他类或程序集中调用它。通常你不需要这样做,所以你可以保留它private

将其设为public 的一个可能用例是允许自动化测试调用它。

【讨论】:

  • 旁注:创建一个空的控制台应用程序将导致class Program 默认为内部类可见性。所以除了Main-方法之外,连类都不需要公开。
【解决方案2】:

两者的区别在于publicprivate访问修饰符的唯一区别,因为两者都是有效的。这完全取决于应用程序的使用情况。

如果您想通过任何外部程序启动入口点(即用作 API,用于测试目的),那么您可能需要将其公开以便可访问。

如果您知道应用程序没有外部使用,那么最好将其设为私有,这样外部应用程序就无法访问它。

【讨论】:

  • -1 通过反射,可以方便的获取其他类的私有方法和字段。
  • @SarpKaya 关键是private 告诉您它对您不可用/您不应该调用它。可以通过诸如 Reflection 之类的后门实现这一点并不会改变这一点。
  • @SarpKaya:封装!= 安全性。
  • @mikek3332002:可执行文件定义了一个入口点。此入口点由编译器在编译时设置。它将设置为您在项目属性中选择的方法的地址。 .NET 然后调用 GetCorExeMainEntrypoint() 来找到它。
【解决方案3】:

在大多数情况下,它没有任何区别。 微软提倡将 Main 设为私有。

这样做的唯一真正价值(据我所知)是它将防止 Main 方法被另一个应用程序的代码库直接调用。

可以通过here 进行很好的讨论

【讨论】:

    【解决方案4】:

    除了普通的公共和私有访问修饰符功能之外,什么都没有。两者都是有效的入口点。

    请参阅:Why is the entry point allowed to be private?Why is Main method private?

    【讨论】:

      【解决方案5】:

      当它是私有的时候,main被标记为exe本身执行的入口点,因此外部的任何东西都无法访问它

      将其公开将使该方法可以从外部访问

      阅读以获取更多说明 http://social.msdn.microsoft.com/Forums/vstudio/en-US/9184c55b-4629-4fbf-ad77-2e96eadc4d62/why-is-main-in-c-not-a-public-static-?forum=csharpgeneral

      【讨论】:

        【解决方案6】:

        有区别,因为第一个是公共的,第二个是私有的,所以当你尝试在课堂外使用第一个时,它会工作得很好,但不能与第二个一起使用。

        但是,如果您尝试将其中之一作为应用程序的入口点,则没有区别。 入口点方法可以是公共的也可以是私有的,没关系。

        【讨论】:

          【解决方案7】:

          public 和 private 是访问说明符。

          我们使用,

           public static void Main()
          

          因为要执行程序,您需要调用存在此 Main() 方法的类,因为您需要将 Main() 方法公开,否则将无法在类外访问。

          它之所以是静态的,是因为它需要在不创建该类的任何对象的情况下访问它。即在课堂上。

          【讨论】:

            【解决方案8】:

            私有或公共声明是它的访问修饰符,私有访问修饰符使其无法被外部对象访问,而公共访问修饰符使其可被外部对象访问。用法示例:

            假设我们有一个类:

            class myClass{
                public void test(){
                    //do something
                }
            }
            

            我们创建该类的一个实例:

            myClass mClass=new myClass();
            

            要访问它的成员函数,您可以:

            mClass.test();
            

            如果它有一个私有访问修饰符,你会得到一个编译错误,说它是不可访问的。

            为了知识起见,要在不创建类实例的情况下访问成员,您还需要将该成员设为静态,例如:

            class myClass{
                public static void test(){
                    //do something
                }
            }
            

            所以现在要访问它,您只需执行以下操作:

            myClass.test();
            

            (请注意,在静态成员中访问的任何成员也应该是静态的)

            【讨论】:

              【解决方案9】:

              基于访问级别。

              private--> access to own class
              public --> open to alll
              

              【讨论】:

                【解决方案10】:

                例如,当您想添加可以从类或程序集外部调用的入口点时,您应该设置public,但如果不重要,请使用private

                【讨论】:

                  猜你喜欢
                  • 2016-05-22
                  • 1970-01-01
                  • 2019-05-28
                  • 1970-01-01
                  • 2015-05-30
                  • 1970-01-01
                  • 2019-11-23
                  • 1970-01-01
                  相关资源
                  最近更新 更多