Nel*_*usa 4 c# asp.net asp.net-core
创建新的ASP.NET Core 3项目后,在Visual Studio 2019中收到以下警告:
Warning CA1052 Type 'Program' is a static holder type but is neither static nor NotInheritable
public class Program
{
public static void Main(string[] args)
{
// ...
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
// ...
}
Run Code Online (Sandbox Code Playgroud)
vs
public static class Program
{
public static void Main(string[] args)
{
// ...
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
// ...
}
Run Code Online (Sandbox Code Playgroud)
Should I add the static modifier? Why / Why not? Pro's and Cons'?
Edit: This is a ASP.NET Core 3 API
用更基本的术语来说,该消息可以想象为:
您的“程序”类似乎只包含声明为静态的方法,因此它不能参与继承层次结构。将其声明为静态(或密封,如果您的目标是不支持静态类的旧版.net)则可以更准确地反映其设计意图
建议将您的类标记为静态,因为它仅包含静态内容。这将防止任何人犯下尝试从其继承的错误,并认为他们可以对继承的版本进行有用的继承。
Microsoft不会将其标记为静态,因为Program本身没有什么特别之处。您可以将非静态方法放入其中,也可以将其放入static void Main
另一个可实例化的类(例如Person)中。
class Person{
public string Name {get;set;}
static void Main(){
Person p = new Person();
p.Name = Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
这会很好;一个类不必是静态的才能承载应用程序入口点,在这种情况下,该类不能是静态的,因为它具有非静态成员。它可以(并且在主体中)实例化。它不叫做程序;任何地方都没有一个称为Program的类,并且这个小应用程序仍然可以运行(不会做太多..)
在您的情况下,请按照建议的方式进行操作,并在类中添加一个静态修饰符,因为这将使您的程序设计得更加健壮;或者,如果您想到了实例化Program的正当理由,请添加一个实例成员,或者忽略该消息并继续使用仅包含静态方法的非静态类-它仍然可以工作