在C#中声明一个类为静态有什么优势吗?

3
在C#中,您可以将类声明为静态,这要求所有成员也必须是静态的。这样做是否有任何优势(例如性能)?还是仅仅是为了确保不会意外地在类中声明实例成员?

2
只是一个小注释/轶事:这就是为什么静态类在C# 2.0中被引入的原因,因为“意外声明实例成员”是其产生的原因。最初它不支持它,在.net Framework 1.1中,“Environment”类具有实例属性,但没有公共构造函数,使该属性无法访问,除非通过需要完全信任的反射来访问。 - Michael Stum
2个回答

7
或者仅仅是确保您不会在类中意外声明实例成员吗?
是的,但它不仅仅是这样:
- 它通过根本没有实例构造函数来防止实例化(而其他所有类都有构造函数 - 要么是您声明的构造函数,要么是隐含的无参构造函数) - 它清楚地表达了您的意图 - 没有任何类可以派生自您的类(它既是密封的又是抽象的) - 没有任何类可以声明您的类类型的字段 - 没有任何类可以使用您的类型作为泛型类型参数
基本上,它告诉编译器和其他开发人员“这永远不能被实例化 - 因此,如果看起来您正在尝试使用实例,则做错了。”
我怀疑有任何性能优势,但以上所有优点对我来说足够了 :)
哦,您也只能在静态类中声明扩展方法...

第一点可能有点误导。你忘记了静态构造函数 :) - Moslem Ben Dhaou
1
@MoslemBenDhaou:已修复,但根据我的经验,“constructor”没有修饰符时几乎总是隐含地表示“实例构造函数”。 - Jon Skeet


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接