C# 程序类应该是静态的吗?

C# 程序类应该是静态的吗?,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,在创建新的ASP.NET Core 3项目后,我在Visual Studio 2019中收到以下警告: 警告CA1052 类型“Program”是静态持有者类型,但既不是静态的也不是不可继承的 公共类程序 { 公共静态void Main(字符串[]args) { // ... } 公共静态IHostBuilder CreateHostBuilder(字符串[]args)=> // ... } vs 公共静态类程序 { 公共静态void Main(字符串[]args) { // ... } 公共

在创建新的ASP.NET Core 3项目后,我在Visual Studio 2019中收到以下警告:

警告CA1052 类型“Program”是静态持有者类型,但既不是静态的也不是不可继承的

公共类程序
{
公共静态void Main(字符串[]args)
{
// ...
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
// ...
}
vs

公共静态类程序
{
公共静态void Main(字符串[]args)
{
// ...
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
// ...
}
我应该添加静态修改器吗?为什么?赞成和反对


编辑:这是一个ASP.NET Core 3API

,从更基本的角度来看,该消息可以想象为:

类“Program”似乎只包含声明为静态的方法,因此它不能参与继承层次结构。将其声明为static(如果您针对的是不支持静态类的.net的古老版本,则将其声明为sealed),以更准确地反映其设计风格

建议将类标记为静态类,因为它只包含静态内容。这将防止任何人犯错误,试图从中继承,并认为他们可以对继承的版本进行有用的继承

微软不会为您将其标记为静态,因为程序本身并没有什么特别之处;您可以将非静态方法放在其中,也可以将您的
static void Main
放在另一个类中,比如Person,它是可实例化的

class Person{
  public string Name {get;set;}
  static void Main(){
    Person p = new Person();
    p.Name = Console.ReadLine();
  }
}
这很好;类不必是静态的来承载应用程序入口点,在这种情况下,该类不能是静态的,因为它具有非静态成员。它可以(也可以是主要的)在主目录中实例化。它不是程序;在任何地方都没有一个叫做Program的类,这个小应用程序仍然可以运行(没有太多功能)


在您的情况下,要么按建议执行并向类中添加静态修饰符,因为这将使您的程序的工程设计更加健壮,要么添加实例成员(如果您能想到实例化程序的有效原因),或者忽略这条消息,继续使用只包含静态方法的非静态类-它仍然可以工作

你读过关于这个主题的内容吗?我读过,但是程序,如你所知,是一个特例程序是如何特例的?它甚至不需要被称为程序。任何带有静态void Main的类都可以作为起始应用程序的入口点。那么,为什么微软没有将程序设为静态类呢?他们应该?任何带有静态void Main的类都可以作为启动应用程序的入口点