c# - 将一个类标记为静态是二进制破坏性更改吗?

标签 c# static static-class

我有一个只包含静态方法的实用程序类。如果我将类标记为静态,这是否是一个破坏性的二进制更改?

我比较了两者的 IL,除了默认构造函数(永远不应该使用)的丢失之外,我还可以看到以下差异...

未标记为静态的类:

.class public auto ansi beforefieldinit MyNamespace.MyClass

标记为静态的类:

.class public auto ansi abstract sealed beforefieldinit MyNamespace.MyClass

我不明白为什么这会是一个重大改变,但是......?

最佳答案

这取决于其他代码对您的类的使用:static 类的潜在使用比非静态类的限制要多得多。

  • 如果该类已像 static 一样使用,即使当时它不是静态的,代码也不会中断。
  • 如果该类已像非静态类一样使用,即已被继承或实例化,则更改是中断的。

由于通常您不能保证以某种方式使用您的非静态类,因此将以前的非静态类变为静态类应该被视为重大更改。如果您有超出您控制范围的代码依赖于您的类,请将旧类指定为废弃,并创建一个新的静态类来代替它。

关于c# - 将一个类标记为静态是二进制破坏性更改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27399834/

相关文章:

c# - 解决应用程序失去焦点时桌面崩溃的问题

c# - 将 Dapper 与 Oracle 用户定义类型结合使用

java - 如何通过setter方法修改私有(private)静态变量

c# - 如何将静态类包装在非静态实例对象中(动态地)

java - 递归内部静态类如何初始化?

java - Bloch Effective Java - 支持静态类而不是非静态类 - 有多少个实例?

c# - 如何适当限制多线程应用程序?

c# - 条形码(代码 128)字体有问题无法扫描

java - 在构造函数中使用时,通过工厂方法延迟实例化常量会引发错误

c - 返回 C 中静态常量变量的地址