【发布时间】:2015-04-17 08:21:16
【问题描述】:
我的例子:
class MyClass
{
public int a = 1;
public static List<MyClass> list = new List<MyClass>();
}
class Program
{
static void Main(string[] args)
{
MyClass.list.Add(new MyClass() { a = 5 });
MyClass.list.Add(new MyClass() { a = 10 });
foreach (MyClass item in MyClass.list) Console.WriteLine(item.a);
Console.ReadKey();
}
此代码有效,并显示我的列表(在 MyClass 类本身中静态定义)正在按我的预期填充。
有什么理由不以这种方式定义我的列表吗?
【问题讨论】:
-
因为公共领域是个坏主意?因为全局可变状态是个坏主意?虽然在打字方面很好 - 而且它并不完全不常见,例如工厂方法返回缓存实例。
-
静态列表有一个所有线程都可以访问的固定内存地址。但是,它是可变的,并且可以更改项目。这些更改可能是并发的,这将导致线程安全问题。
List<T>和类似的集合不是线程安全的,你必须实现全局锁定(这也很尴尬和危险)。 -
到目前为止,所有的 cmets 和答案都具有教育意义。我相信,我不理解的是我自己缺乏 OOP 知识。我会做更多的研究。我会给你们一个 +1,但我的代表仍然
-
@SlowCoder74:你写的代码很好用(是正确的)。但洞察力表明,包含过多此类代码的项目注定要失败。所以如果你打算写一个小项目没问题,但对于工业项目不建议这样做。