决定使C#类静态

fin*_*ook 3 c# static static-methods class

如果我Utilities.cs在C#中有一个类,它只包含静态方法

例如

public static string DoSomething()
{
    return "something";
}
Run Code Online (Sandbox Code Playgroud)

我应该让这个类本身是静态的吗?

public static Utilities()
{
    ...
Run Code Online (Sandbox Code Playgroud)

使类静态有什么优势吗?

Ray*_*Ray 11

是的你应该.它阻止人们在不应该实例化的情况下实现它,并使类的目的更加清晰.阅读MSDN页面以获取更多信息.

如果要添加扩展方法,还需要将类标记为静态

您应该仔细考虑实用程序类.想想这些方法是否真正属于那里,或者是否有更多的OO方式.

另请看Jon Skeet的这个问题和答案.


Tim*_*oyd 6

主要优点是它使您的设计意图更加清晰,并强制执行这些意图.例如,你不能从静态类继承(即专门化它),你不能创建它的实例(它实际上是一个单例).这些都是您的实用程序类的设计意图.

但是,应谨慎使用静态类和方法,因为它很难改变程序的行为.静态类和方法是非常具体的,不能(轻松)替换,如果您使用接口和构造函数注入的情况.然而,静态类和成员可能很有用,但很少.过度使用静态技术会降低您的软件的灵活性,并且更难以测试.