我想做这样的事情:
public class Foo {
// Probably really a Guid, but I'm using a string here for simplicity's sake.
string Id { get; set; }
int Data { get; set; }
public Foo (int data) {
...
}
...
}
public static class FooManager {
Dictionary<string, Foo> foos = new Dictionary<string, Foo> ();
public static Foo Get (string id) {
return foos [id];
}
public static Foo Add (int data) {
Foo foo = new Foo (data);
foos.Add (foo.Id, foo);
return foo;
}
public static bool Remove (string id) {
return foos.Remove (id);
}
...
// Other members, perhaps events for when Foos are added or removed, etc.
}
这将使我能够从任何地方管理 Foo
的全局集合。但是,有人告诉我静态类应该始终是无状态的——您不应该使用它们来存储全局数据。总体而言,全局数据似乎不受欢迎。如果我不应该使用静态类,那么解决这个问题的正确方法是什么?
注意:我确实找到了 similar question ,但给出的答案并不真正适用于我的情况。
最佳答案
谁坚持静态类应该是无状态的?静态表示声明。
只知道静态类在 CLR 中是如何工作的:
- 您无法控制调用静态构造函数的时间。
- 静态类对于每个调用程序都有一个单独的状态。
还要注意并发问题。
附带说明一下,令我惊讶的是人们经常说“不要使用 X”。这就像有人走进你的工具棚,指着六个工具说,“那些工具是不好的做法。”这没有意义。
关于c# - 在静态类中有状态是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754089/