我有一个名为Test的静态类和一个私有的List集合。现在我想实现一个getter来将我的List返回给主类。这是正确的方法吗?
其次是可以实现静态构造函数吗?如果没有,我如何正确声明我的列表集合?
static class Storage
{
private static List<string> store;
static Storage()
{
store = new List<string>();
}
//Is it okay to have a getter in my static class to return my List Collection
public static List<string> getList
{
get
{
return store;
}
}
public static void addString(string add)
{
store.Add(add);
}
public static void removeString(string remove)
{
store.Remove(remove);
}
答案 0 :(得分:6)
如果在getter中返回对列表的引用,则任何调用者都可以在列表中添加或删除项目,而无需通过静态类上的add / remove方法。如果你想阻止任何人修改列表,我会从getter返回read only collection:
public static IEnumerable<string> getList
{
get
{
return store.AsReadonly();
}
}
修改强>
正如Marc指出的那样,你需要注意多线程问题。想象一下,一个线程枚举通过getter获得的集合,而另一个线程通过添加或删除项来修改它 - &gt;你会得到一个例外,说明你在枚举时不能修改它。唯一的解决方案是锁定对私有集合的所有访问,并在getter中返回一个副本。
答案 1 :(得分:0)
您可以改为private static readonly List<string> store = new List<string>()
。
拥有一个返回你的领域的属性是接近它的正确方法。你永远不应该有公共领域。
此外,虽然我们讨论的是样式:方法和属性名称应以Microsoft发布的命名约定的大写字母开头。