【发布时间】:2010-11-19 03:10:21
【问题描述】:
This MSDN article 声明静态类应声明为密封和抽象。我的印象是静态类已经被密封了。为什么还需要将静态类声明为密封的?
【问题讨论】:
-
这部分句子明确指代C#以外的其他语言
-
@HenkHolterman 和 VB.NET 也是如此,因为 MustInherit 和 NotInheritable 不能一起使用。
标签: c#
This MSDN article 声明静态类应声明为密封和抽象。我的印象是静态类已经被密封了。为什么还需要将静态类声明为密封的?
【问题讨论】:
标签: c#
我认为那篇文章的相关内容是:
“如果您的编程语言没有对静态类的内置支持,请务必将静态类声明为密封和抽象,并添加私有实例构造函数。”
请记住,.NET 框架支持许多不同的语言。
【讨论】:
似乎是说,如果语言不支持静态类,则使用私有构造函数将类声明为密封和抽象类是静态类的替代方案。
【讨论】:
C# v1 不允许在类中使用“静态”关键字。因此,如果您有一个只有静态方法的类,建议将其声明为“密封”、“抽象”并将构造函数设为私有。这意味着没有人可以实例化您的类或尝试从它继承。 [从只有静态方法的类继承是没有意义的。]
C# v2 允许在类上使用 static 关键字,因此您不必使用上述技巧来强制正确使用。
【讨论】:
abstract 的一个影响是它不能被实例化。sealed 的效果之一是它不能被继承。这就是static 类的真正含义——一个不能被实例化并且不能被继承的类。
所以文章没有说明你应该将你的静态类标记为abstract 和sealed,但这是静态类在 IL 中的表示方式。
(如果其他语言没有 static 关键字,则可能允许您这样做,尽管我对此表示怀疑,因为 abstract sealed 类在语义上没有多大意义。)
【讨论】: