Program 类应该是静态的吗? [复制]

2024-01-27

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

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

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

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

vs

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

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

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

编辑:这是 ASP.NET Core 3API


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

您的类“程序”似乎只包含声明为静态的方法,因此它不能参与继承层次结构。将其声明为静态(如果您的目标是不支持静态类的旧版 .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();
  }
}

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Program 类应该是静态的吗? [复制] 的相关文章

  • copy_from_user() 错误:目标大小太小

    我正在为内核模块编写 ioctl 处理程序 我想从用户空间复制数据 当我编译禁用优化的代码时 O0 gflags 编译器返回以下错误 include linux thread info h 136 17 error call to bad
  • 使用管道在父级和子级之间传递整数值

    我对如何正确使用 pipeline 在两个进程之间传递整数值有点困惑 在我的程序中 我首先创建一个管道 然后分叉它 我假设我有 两个 管道 据我了解 这是我的任务 我的父母通过 for 循环检查某个操作的整数值 i 增加计数变量 并将值保存
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • 如何以编程方式删除受信任的根证书颁发机构中的证书?

    我需要能够从组织中的每台电脑中删除特定的证书 是的 我可以逐个座位 但我要到周四才能完成 而且我没有人力逐个座位 是否有使用 C 的编程方式来执行此操作 我认为你不需要编写任何 C 看看certmgr exe del http msdn m
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 我担心我添加了太多接口

    我正在构建我的领域模型并继续重构它 正如我所做的那样 我发现我喜欢接口 因为它允许我根据接口为具体类型创建可重用的方法 控制器 视图 但是 我发现每次向域实体之一添加新属性时 我都会创建一个接口 例如 我有一个会员状态从抽象继承的对象Ent
  • 我能否找出 ASP 回发时将触发哪些控制事件?

    是否有可能在发生之前获取将要触发的控制事件列表 例如在Page Load处理程序 例如 如果单击了一个按钮 我可以在button click事件处理程序被调用 您选择了一个非常棘手的问题 原因是事件触发的方式有多种 1 EVENTTARGE
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 使用 VSTS 通过 VSTS 包和旧式 csproj 构建解决方案

    我有一个解决方案 具有以下内容 带有旧式 csproj 的多个库 net461 带有新 csproj 的多个项目 net461 Net core 库和我们的应用程序 但目标是 net461 并引用旧样式的 csproj 项目 我使用 VST
  • 如何在 C++ 中正确使用 cin.fail()

    我正在编写一个程序 从用户那里获取整数输入cin gt gt iUserSel 如果用户输入一个字母 程序就会进入无限循环 我试图用下面的代码来阻止这种情况 但程序进入无限循环并打印出 错误 输入 我该如何修复我的程序 cin gt gt
  • 更改私有模块片段是否会导致模块重新编译?

    On 此页面有关 C 20 模块功能 https www modernescpp com index php c 20 modules private module fragment and header units 我发现了这样的说法 借
  • 为什么这个位图图像在加载后会改变大小?

    快速提问 我有这个1000 1000位图图像 我使用这个例程来加载它 private BitmapSource initialBitmap new BitmapImage new Uri C Users Desktop Original b
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • g++ / gcc 是否支持 C++20 新的atomic_flag 功能?

    根据参考参数 https en cppreference com w cpp atomic atomic flag c 20 有丰富的 对我来说有用的 支持atomic flag运营 然而 目前尚不清楚 gcc 是否支持这些功能 它们在任何
  • C# 多维数组解析

    我有一个多维数组 内容在调试器中看起来像这样 数组设置为 String s new String 6 4 A B Yes C A B Yes C A B No C A B Yes C A B Yes C A B Yes C A B No C
  • 在多线程环境中捕获信号

    我有一个大型程序 需要尽可能具有弹性 并且有大量线程 我需要捕获所有信号SIGBUS SIGSEGV 并在必要时重新初始化有问题的线程 或者禁用该线程以继续减少功能 我的第一个想法是做一个setjump 然后设置信号处理程序 可以记录问题
  • C++ 中的析构函数

    我的 AB h 文件中有一个构造函数 class AB private int i public AB i 0 constructor AB i 0 destructor virtual void methodA unsigned int
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • 如何使用 Microsoft Graph API 更新 MailboxSettings

    我想从不同的日历更新邮箱设置 如何构建可以通过 Microsoft Graph 更新 MailboxSetting 的请求 这是我的代码示例 但有例外 代码示例 User obj GraphServiceClient Users roomC

随机推荐

  • php 多个 if 语句?

    抱歉 这看起来像是一个菜鸟问题 今天早上我的大脑无法运转 我正在尝试执行多个if声明 但他们的行为不正确 在找到它正在寻找的模板后 它似乎总是加载最少的模板 做这样的事情的最好方法是什么 post wp query gt post if i
  • 如何用Python中的其他字符替换字符串中的unicode字符?

    我有一个从阅读带有项目符号的 HTML 网页中获得的字符串 由于项目符号列表 这些项目符号具有类似 的符号 请注意 文本是来自使用 Python 2 7 的网页的 HTML 源代码urllib2 read webaddress 我知道项目符
  • 将物理网卡绑定到docker容器

    我的主机 PC 上安装了 4 个 NIC 我想启动不同的 docker 容器 并将不同的物理网卡绑定到每个容器 我能为docker做些什么 对于 VirtualBox 这可以通过为物理网卡的每个虚拟机创建桥接适配器来完成 当您使用 Dock
  • 版权元标记在 HTML5 中有效吗?

    W3C 验证器输出 第 5 行 第 41 列 元素元上的属性名称版权值错误 未注册关键字版权 我需要设置版权 任何想法 都柏林核心提出rightsHolder https www dublincore org specifications
  • 了解接口内部接口(嵌入式接口)

    我试图用以下代码来理解接口嵌入 我有以下内容 type MyprojectV1alpha1Interface interface RESTClient rest Interface SamplesGetter SamplesGetter h
  • 仅 CSS 3D 旋转文本

    我有一个带有一些文本旋转的 div 如何获得文本深度以提供更好的 3D 效果 为了澄清 在90deg文本变成1px厚 因为我们只能从侧面看到它 我该如何制作它 例如 10px厚的 此外 应显示适当的深度 即在0deg我们看不到深度 在45d
  • 在用户可见活动后执行方法

    我的活动包含太多 UI 控件 我想在使活动可见后执行一个方法 我尝试过的一个例子 public class Main extends Activity Override public void onCreate Bundle savedIn
  • Android 画布保存总是 java.io.IOException: 打开失败: ENOENT (没有这样的文件或目录)

    我有一个画布应用程序 我正在尝试创建一个签名应用程序Canvas onTouchListener 这是我的保存方法 我尝试将签名保存到图像中 private void save hideMenuBar View content this c
  • Travis 尝试将应用提交到 Google Play 商店时出错

    我首先研究了在 Github 上找到的几个要点 https gist github com lpetre 87a5196d14cf4484f1f2 https gist github com lpetre 87a5196d14cf4484f
  • sphinx4 中的语音识别响应很差

    目前我们正在研究使用 sphinx4 进行语音识别 我们正在努力为听写类型应用程序取得良好的响应 输入是一个 wav 文件 我们希望转录它 我研究了 Sphinx4 提供的 LatticeDemo 和 Transscriber 演示 当我使
  • SBT:依赖其他SBT项目而不发布

    我有一组松散相关的组件 其中一些组件依赖于其他组件 为了具体起见 我们假设我们有组件 common a 和 b common 没有任何依赖项 但所有其他项目都使用 common 此外 a 依赖于 b 所有组件都是用 Scala 编写的 我想
  • 为什么 MVC 在 GET 上使用 Modelstate 而不是提供的模型

    当 MVC 运行时ActionMethod它将填充ModelState字典并使用ModelBinder建立ActionMethod参数 如果有 它对两者都这样做GET and POST 这是有道理的 之后ActionMethod已成功运行
  • JPA 与 HIBERNATE 插入非常慢

    我正在尝试使用 JAP 和 HIBERNATE 将一些数据插入 SQL Server 2008 R2 除了速度非常慢之外 一切都 有效 要插入 20000 行 大约需要 45 秒 而 C 脚本大约需要不到 1 秒 有这个领域的资深人士可以提
  • 针对可怕的 While (True) 循环的最佳重构

    如果您像我一样在 While True 循环处颤抖 那么您一定也已经认真思考了重构它的最佳方法 我见过几种不同的实现 没有一个真正比其他实现更好 例如计时器和委托组合 那么 您想出或看到的重构可怕的 While True 循环的最佳方法是什
  • 使用 LINQ 时“输入字符串的格式不正确”

    我正在尝试做一个FirstOrDefault 查询对象集并抛出一个奇怪的异常 My Code private RecordObject GetRecordByID int recID return objectSet FirstOrDefa
  • 如果特定列中的值不是 pandas 数据框中的整数,则删除行

    如果我有一个数据框并且想要删除其中一列中的值不是整数的任何行 我该怎么做 另一种方法是 如果值不在 0 2 范围内 则删除行 但由于我不确定如何执行其中任何一个操作 我希望有人可以这样做 这是我尝试过的 但没有成功 不知道为什么 df df
  • 为什么 Windows API 中的所有内容都是类型定义的?

    更具体地说 为什么是同一件事typedef在很多情况下都有多个不同的名称 为什么typedef指针类型 有时会模糊逻辑 例如 typedef const WCHAR LPCWSTR PCWSTR 这有什么意义呢 实际上这里发生了一些不同的事
  • 如何使用 gpg 命令行检查密码是否正确

    我正在尝试使用自动化备份duplicity 但是当我测试结果时 我得到 gpg 公钥解密失败 密码错误 我想检查我使用的密码是否实际上是与相应 gpg 密钥关联的密码 但无论如何我在 gpg 命令行选项中都看不到 不要加密或解密任何内容 只
  • 如何使用动态键名解析 JSON?

    我有一个像这样的 JSON 响应 array object1 aa somevalue1 bb somevalue2 cc somevalue3 object2 aa somevalue4 bb somevalue5 cc somevalu
  • Program 类应该是静态的吗? [复制]

    这个问题在这里已经有答案了 创建新的 ASP NET Core 3 项目后 我在 Visual Studio 2019 中收到以下警告 警告 CA1052 类型 Program 是静态持有者类型 但既不是静态的也不是不可继承的 public