C# 静态类和Getter
我有一个名为Test的静态类和一个私有列表集合。现在我想实现一个getter来将我的列表返回到主类。这是正确的方法吗 其次,实现静态构造函数可以吗?如果不是,我如何正确声明我的列表集合C# 静态类和Getter,c#,collections,static,C#,Collections,Static,我有一个名为Test的静态类和一个私有列表集合。现在我想实现一个getter来将我的列表返回到主类。这是正确的方法吗 其次,实现静态构造函数可以吗?如果不是,我如何正确声明我的列表集合 static class Storage { private static List<string> store; static Storage() { store = new List<string>(); } //Is it oka
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);
}
静态类存储
{
私有静态列表存储;
静态存储()
{
store=新列表();
}
//在静态类中使用getter返回列表集合可以吗
公共静态列表getList
{
得到
{
退货店;
}
}
公共静态void addString(字符串添加)
{
store.Add(Add);
}
公共静态空洞移除(字符串移除)
{
储存。移除(移除);
}
您可以改为执行私有静态只读列表存储=新列表()
使用属性返回字段是正确的方法。永远不要使用公共字段
此外,当我们讨论style时:根据Microsoft发布的命名约定,方法和属性名称应以大写字母开头。如果您在getter中返回对列表的引用,则任何调用方都可以在列表中添加或删除项,而无需通过静态类上的add/remove方法。如果您希望如果有人修改列表,我将从getter返回一个:
public static IEnumerable<string> getList
{
get
{
return store.AsReadonly();
}
}
公共静态IEnumerable getList
{
得到
{
return store.AsReadonly();
}
}
编辑
正如Marc指出的,您需要注意多线程问题。假设一个线程枚举通过getter获得的集合,而另一个线程通过添加或删除项来修改它->您将得到一个异常,说明在枚举集合时无法修改它。唯一的解决方案是锁定所有访问到私有集合并在getter中返回一个副本。对我来说似乎是一个问题。您应该非常小心这里的线程问题;静态字段通常是线程问题。谢谢Daniel。您对我的方法名称的更正。我只是在玩C#。因此,我实现getter以返回列表集合的方式是t正确的方法吗?是的,那很好。虽然你的添加和删除方法是多余的。谢谢Chris。我可以说ICollection而不是IEnumerable吗?是的,你可以返回ICollection
而不是让我使用ICollection,并从我的主程序调用它,我如何循环通过它来查看字符串值(Storage.getList中的字符串值){…}