在C#中,标记类静态的目的是什么?
如果我有一个只有静态方法的类,我可以将该类标记为静态。为什么我要将类标记为静态?如果所有方法都是静态的,并且我打算永远不会添加非静态方法,我是否不想将类标记为静态?
我环顾四周,看到了一些类似的问题,但没有一个像这样。
答案 0 :(得分:28)
将类标记为static是一种声明性语句,您只希望此类型具有static和const成员。这是由编译器强制执行的,可以防止您意外地向该类型添加实例方法。
其他优点
答案 1 :(得分:7)
将某个班级标记为static
可以为您提供两件重要的事情。
编译器验证您只将static
成员放入课程中。
向您的代码的读者明确声明此类只是static
成员的容器。
该功能是为响应NDP v1.0中的错误而发明的,其中a un-callable non-static
member was included in the System.Environment
class。
答案 2 :(得分:6)
如果您想编写扩展方法,则必须使用静态类。否则就是显示该类永远不会有任何实例数据。
答案 3 :(得分:5)
这是一种特定于C#语言的约定,CLR没有静态类的概念。它确保您不会在类中意外添加实例成员,无法继承类和客户端代码,不会意外地创建类的实例。该类的基础TypeAttributes是Abstract和Sealed。 Abstract确保新运算符无法工作,Sealed确保您不能从类继承。
同样按照惯例,扩展方法必须是静态类的静态成员。 VB.NET的做法不同,它需要[Extension]属性。
在代码中使用静态类不是必需的,但它很有用。他们的合同非常具有描述性,它使您的代码更容易理解。但要注意不要将它们用作编写程序代码而不是OOP代码的工具。
答案 4 :(得分:1)
如果要强制它仅包含静态方法(典型的帮助程序类),则将类标记为静态。如果您放置一个实例方法,编译器会抱怨 - 这很好。在.NET框架的第1版中,有一个类,不记得哪一个,只是为了附带静态方法。意外地,其中一种方法没有获得静态修饰符。因为这个功能在发货时很晚就发现了。他们确实使构造函数成为私有的,因此无法使用该方法。