在C#中,标记类静态的目的是什么?

在C#中,标记类静态的目的是什么?

如果我有一个只有静态方法的类,我可以将该类标记为静态。 为什么我要将类标记为静态? 如果所有方法都是静态的,并且我打算永远不会添加非静态方法,我是否不想将类标记为静态?

我环顾四周,看到了一些类似的问题,但没有一个像这样。

将类标记为static是一种声明性语句,您只希望此类型具有static和const成员。 这是由编译器强制执行的,可以防止您意外地向该类型添加实例方法。

其他优点

  • 扩展方法只能在静态类中定义
  • 阻止用户创建类的实例
  • 防止使用该类型作为通用参数(感谢Eric!)

将类标记为static会让您获得两件重要的事情。

  • 编译器validation您只将static成员放在类中。

  • 向您的代码的读者明确声明此类只是static成员的容器。

该function是为了响应NDP v1.0中的一个错误而发明的,其中一个不可调用的非static成员包含在System.Environment类中 。

如果您想编写扩展方法,则必须使用静态类。 否则就是显示类永远不会有任何实例数据。

它是一种特定于C#语言的约定,CLR没有静态类的概念。 它确保您不会在类中意外添加实例成员,不能inheritance类和客户端代码,不能意外地创建类的实例。 该类的基础TypeAttributes是Abstract和Sealed。 Abstract确保新运算符无法工作,Sealed确保您不能从类inheritance。

同样按照惯例,扩展方法必须是静态类的静态成员。 VB.NET的做法不同,它需要[Extension]属性。

在代码中使用静态类不是必需的,但它很有用。 他们的合同非常具有描述性,它使您的代码更容易理解。 但要注意不要将它们用作编写程序代码而不是OOP代码的工具。

如果要强制它仅包含静态方法(典型的帮助程序类),则将类标记为静态。 如果您放置一个实例方法,编译器会抱怨 – 这很好。 在.NET框架的第1版中,有一个类,不记得哪一个,只用于静态方法。 意外地,其中一种方法没有获得静态修饰符。 因为这个function在发布时很晚才发现错误。 他们确实使构造函数成为私有的,因此无法使用该方法。