This MSDN article指出静态类应声明为密封和抽象。我的印象是静态类已经被封闭了。为什么你还需要声明一个静态类为密封?为什么要在C#中声明静态类为密封和抽象?
回答
我认为那篇文章的相关位:
“不要声明静态类的密封和抽象,并添加一个私有实例构造函数,如果你的编程语言不具有内置静态类的支持“
请记住,.NET框架支持许多不同的语言。
它似乎是说如果语言不支持静态类,那么声明一个类作为密封并用私有构造函数抽象是静态类的替代方法。
C#v1不允许在类上使用“static”关键字。所以如果你有一个只有静态方法的类,建议声明它是'密封','抽象',并使构造函数为私有。这意味着没有人可以实例化你的类或尝试从它继承。 [这是没有意义的,只有静态方法的类继承。]
C#V2允许在一个类中的static关键字,这样你就不必使用上述伎俩执行正确的用法。
- 将类别标记为
abstract
的其中一个影响是它无法实例化。 - 将类标记为
sealed
的其中一个影响是无法继承。
这就是static
类实际上是 - 一个无法实例化,不能被继承的类。
所以这篇文章没有说明你应该另外标记你的静态类为abstract
和sealed
,但这就是如何在IL中表示静态类的方式。
(其他语言可能允许你这样做,如果他们没有一个static
关键字,但我对此表示怀疑,因为abstract sealed
类没有做出很大的意义语义。)
想要为未来的旅行者添加4.0 IL,使用静态,你会得到'.class private auto ansi sealed'之类的东西。所以是的,他的回答是*为什么*。在C#中使用静态它删除,将有你,因为在C#中它不能被继承了生成IL任何默认构造函数。所以在C#中静态是'首选',只需完成一些上述的答案。 – Celess 2013-07-15 20:46:25
- 1. 为什么抽象类不能被密封或静态?
- 2. 为什么我们要在普通类中声明静态类?
- 3. 为什么静态变量需要在C++中声明两次
- 4. 为什么WebMethod声明为静态?
- 5. 抽象类声明为final
- 6. 抽象类声明在C++
- 7. 抽象,密封和静态类的实时使用
- 8. 为什么HttpServlet类被声明为抽象?
- 9. 为什么不能在类中声明const静态字符串
- 10. C#静态字典在抽象类中声明和初始化.NET 2.0
- 11. 为什么声明Mapper和Reducer类是静态的?
- 12. 为什么需要将静态方法封装到类中?
- 13. C++抽象类型声明
- 14. 为什么不能将Java类声明为静态?
- 15. 为什么回调函数在类中声明时需要是静态的
- 16. Java为抽象类声明类?
- 17. 在C++中声明抽象类
- 18. 为什么变量应声明为静态和最终
- 19. Django - 为什么模型类中声明的变量静态
- 20. 在C++中,接口类,静态类和抽象类是什么意思?
- 21. 为什么我们要声明一个静态方法
- 22. 为什么我们要声明记录器静态最终?
- 23. c#静态类声明
- 24. 为什么需要抽象类?
- 25. 为什么需要抽象类?
- 26. 类必须声明为抽象或?
- 27. 为什么C#不允许变量在方法中声明为静态?
- 28. 为什么要找到类型声明?
- 29. 匿名对象可以在C++中声明为静态吗?
- 30. 为什么jsp中的EL函数必须声明为静态?
句子的那部分明确提到其他语言比C# – 2009-08-12 22:09:33
@HenkHolterman和VB.NET为好,因为为MustInherit和NotInheritable不能一起使用。 – 2012-08-26 03:08:16