静态类的静态方法与非静态类的静态方法(C#)

在接受采访时我被问到了上述问题。 你能解释一下这个区别吗? (性能 – 内存 – 使用情况 – 何时使用?)

谢谢,

二崁

声明一个静态类将你的这个类的意图logging为一个静态function的集合,而任何添加实例成员的人都会得到一个编译错误。

具有静态成员的非静态类通常表示该类被devise为在某个时刻被实例化。 这些类的静态方法通常做两件事之一:

  1. 提供用于创build该types实例的工厂方法;
  2. 提供不需要types实例的帮助器function;

另外,如前所述,扩展方法只能在静态类中声明。

我假设你被要求了差异?

静态类的静态方法可以用来定义扩展方法。 非静态类的静态方法不能。

在性能和内存使用方面; 完全没有。 有一个静态类意味着你知道没有实例,但回到1.1有一个私人构造已经足够了。 使用一个静态类,如果它没有任何意义,有一个实例! (公用事业类等)

当您提供实用程序function并且您的所有方法都是静态的时,我build议您在静态类中使用静态方法。

当你想提供刚刚处理你的实例的实用方法时,我build议你在非静态类中使用静态方法。 例如:

var myClass = MyClass.Create(); var myClass = MyClass.Parse("serialized.MyClass"); 

在决定是使用所有静态方法使用普通类还是使用静态类时,我面临的一个主要区别是普通类支持接口实现,而静态类不支持。 我只使用静态类,当我确定它将是一个静态函数(通常是帮助函数)的集合,并且永远不会在程序的主stream中。 我提倡接口编程,dependency injection,unit testing等。因此,对于程序的主stream,我使用普通类与静态方法。