Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Win Forms应用程序在静态类中有Main,而我应该留在中_C#_Main_Static Classes - Fatal编程技术网

C# 为什么Win Forms应用程序在静态类中有Main,而我应该留在中

C# 为什么Win Forms应用程序在静态类中有Main,而我应该留在中,c#,main,static-classes,C#,Main,Static Classes,Windows窗体应用程序项目将主方法放置在静态类中 对于我这个来自Java的新手来说,这很奇怪,也很不舒服。我有几个简短的问题可以帮助我更好地理解发生了什么,以及应该如何按照惯例处理 为什么这个类在默认情况下是静态的 我是否应该在Main中创建一个非静态公共类的新实例,然后从该类开始工作 如果不是,我应该如何编写入口点位于静态类中的应用程序(结构上) 要启动程序,您需要一个对象及其方法的实例。例如,在这种情况下,为了启动Windows应用程序,CLR的主要入口点通常是“Program.cs”

Windows窗体应用程序项目将主方法放置在静态类中

对于我这个来自Java的新手来说,这很奇怪,也很不舒服。我有几个简短的问题可以帮助我更好地理解发生了什么,以及应该如何按照惯例处理

  • 为什么这个类在默认情况下是静态的
  • 我是否应该在Main中创建一个非静态公共类的新实例,然后从该类开始工作
  • 如果不是,我应该如何编写入口点位于静态类中的应用程序(结构上)

    • 要启动程序,您需要一个对象及其方法的实例。例如,在这种情况下,为了启动Windows应用程序,CLR的主要入口点通常是“Program.cs”。所以您需要调用程序,然后调用它的静态方法。一个简单的代码表示可以是:

      //Example Entry point of Program just for interpretation
      public static class Foo
      {
          private static int  intID { get; set; }
          public static string  strName { get; set; }
      
          public static string Start()
          {
              return "Program run successfully";
          }
      }
      
      如果这是CLR的入口点,为了启动和调用它,您只需:

      Foo.Start();
      
      在WinForm情况下,其:

      Program.Main();
      

      请记住,Program.cs只是一个默认的项目模板。您可以删除它并在其他类中编写Main函数,甚至使用static Main重命名静态类


      关于第二个问题,答案是肯定的。

      Bullet 1):编译器设计中任意选择的结果(编译器可能创建了类“Program”的实例并调用了它的“Main”方法)。子弹2):是的。@Graffito不可能要求更干净的回答。非常感谢。“你可以删除它并在其他类中编写主函数。”。。哇,我从来没有因为某种原因想到过。。谢谢