2011-10-05 88 views
3

如果我有在C#中Utilities.cs类,其中只包含静态方法决定做一个C#类的静态

例如

public static string DoSomething() 
{ 
    return "something"; 
} 

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

public static Utilities() 
{ 
    ... 

做静态类有什么好处?

回答

11

是的,你应该。它阻止人们在不应该实例化类的时候,并且使类更清晰。阅读the MSDN page for more information

您还需要将类标记为静态的,如果你想添加Extension Methods

你应该仔细考虑的实用工具类。想想这些方法是否真的属于那里,或者是否有更多的面向对象方法。

也看看这个question和Jon Skeet的答案。

+0

谢谢,扩展方法不是我想到的 – finoutlook

1

是的,你应该把它变成静态的。使其变为静态可以防止它被实例化。它主要是为了告诉使用类的人它只包含静态方法,这有助于可读性。

6

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

但是,应该谨慎使用静态类和方法,因为它使得很难改变程序的行为。静态类和方法非常具体,不能(很容易)被替换,就像你使用接口和构造器注入一样。静态类和成员可以很有用,但很少。静态过度使您的软件变得更加灵活,并且更难以测试。

+0

是的,实用程序类听起来应该是一个单身,所以应该是静态的(关注这种方法)。 – finoutlook

1

只有该静态类不能包含非静态成员,所以防止您意外添加它们。正如雷的回答中所提到的,它会让你的代码更清晰。