静态与实例化

时间:2016-02-01 09:43:01

标签: c# static instantiation

假设您有一个Writer类,可以将obj写入fileName。你愿意吗

new Writer(fileName, obj).Write();

Writer.Write(fileName, obj);

如果将Writer划分为子方法,则不必将obj传递给第一种情况下的每个新方法。第二种方法可能更快,并且不会实例化新对象。

2 个答案:

答案 0 :(得分:2)

这基本上归结为Writer是有状态的还是无国籍的。即,当您调用Write时,如果某个内部变量发生更改,那么理想情况下您需要创建Writer的实例

如果Write方法完全是自包含的,那么将它作为Writer类的静态方法完全有效。

但是,如果更好地定义了目标,即Write(FileStream file, Foo object),那么您可以选择创建扩展方法而不是整个静态Writer类。

答案 1 :(得分:-1)

将事实视为:

  • 测试对您很重要?
  • 如果Writer停留在内存中(静态内存中没有清除静态变量),将会出现问题。
  • 您想要一个软件线程安全吗? (他们将共享相同的实例,因此您可以获得异常/问题)

这个问题可以帮助你更深入。

Why are static variables considered evil?

还要决定是否应该使其静止:

Java: when to use static methods