gpt4 book ai didi

c# - Program 类应该是静态的吗?

转载 作者:行者123 更新时间:2023-12-02 06:51:32 25 4
gpt4 key购买 nike

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

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

public class Program
{
public static void Main(string[] args)
{
// ...
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
// ...
}

对比

public static class Program
{
public static void Main(string[] args)
{
// ...
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
// ...
}

我应该添加 static 修饰符吗?为什么/为什么不?优点和缺点?

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

最佳答案

用更基本的术语来说,该消息可以想象为:

Your class 'Program' only seems to contain methods that are declared as static and as a result it can not participate in an inheritance hierarchy. Declare it as static (or sealed if you're targeting an ancient version of .net that doesn't support static classes) to more accurately reflect what its design sentiment is

建议将您的类标记为静态,因为它只包含静态内容。这将防止任何人犯下尝试继承它的错误,并认为他们可以使用继承的版本做一些有用的继承明智的事情

Microsoft 不会为您将其标记为静态,因为程序本身没有什么特别之处;您可以在其中放入非静态方法,或者可以将 static void Main 放入另一个可实例化的类中,例如 Person。

class Person{
public string Name {get;set;}
static void Main(){
Person p = new Person();
p.Name = Console.ReadLine();
}
}

这样就可以了;类不必是静态的来托管应用程序入口点,在这种情况下,该类不能是静态的,因为它具有非静态成员。它可以(并且主要是)在 main 中实例化。它不叫程序;它叫程序。任何地方都没有名为 Program 的类,这个小应用程序仍然会运行(不会做太多事情..)

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

关于c# - Program 类应该是静态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com