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

时间:2010-02-15 16:33:35

标签: c# oop static methods

我在接受采访时被问及上述问题。你能解释一下这些差异吗? (性能 - 内存 - 使用 - 何时使用?)

谢谢,

二崁

6 个答案:

答案 0 :(得分:49)

声明一个静态类会将您对该类的意图记录为静态功能的集合,任何添加实例成员的人都会收到编译错误。

具有静态成员的非静态类通常表示该类被设计为在某个时刻被实例化。这些类的静态方法通常执行以下两种操作之一:

  1. 提供用于创建该类型实例的工厂方法;
  2. 提供不需要该类型实例的帮助程序功能;
  3. 此外,如前所述,扩展方法只能在静态类上声明。

答案 1 :(得分:19)

我认为你被问到了差异?

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

答案 2 :(得分:16)

在性能和内存使用方面;没什么。拥有一个静态类意味着你知道没有实例,但是在1.1中有一个私有构造函数就足够了。如果只有一个实例没有意义,请使用静态类! (实用班等)

答案 3 :(得分:6)

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

如果要提供仅处理实例的实用程序方法,我建议您在非静态类中使用静态方法。例如:

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

答案 4 :(得分:0)

在决定是否使用所有静态方法的普通类时,或者使用静态类时,我遇到的一个主要区别是普通类支持接口实现,而静态类则不支持。 我只在确定它是静态函数的集合(通常是辅助函数)时才使用静态类,并且永远不会出现在程序的主流中。我提倡接口编程,依赖注入,单元测试等。因此,对于程序的主流程,我使用普通类和静态方法。

答案 5 :(得分:0)

就内存而言,有一些细微的区别:非静态类中的静态方法仅在创建该类型的第一个实例时才分配,而在释放该类型的最后一个实例时才分配。当我们具有相同类型的对象集合以减少所使用的内存量时,实例对象的静态方法非常有用。使用静态方法的缺点是它们不能进行单元测试,因此在创建静态方法之前,应注意其将如何影响代码覆盖率。