我有以下类(class):
class SampleClass
{
private ArrayList mMyList;
SampleClass()
{
// Initialize mMyList
}
public ArrayList MyList
{
get { return mMyList;}
}
}
我希望用户能够获得 mMyList,这就是为什么我通过属性公开“get”,但我不希望他们对对象进行更改(即 MyList.Add(new Class());)回到我的类(class)。
我想我可以返回对象的副本,但这可能会很慢,我正在寻找一种方法来提供编译时错误,通知用户他们不应该期望能够修改返回的属性(property)的值(value)。
这可能吗?
最佳答案
使用 ArrayList 时,您的功能相当有限,因为 BCL 中没有只读的非泛型集合类。快速而肮脏的解决方案是返回一种 IEnumerable 类型。
public IEnumerable MyList
{
get { return mMyList;}
}
这实际上不会阻止某人转换到 ArrayList 但默认情况下它也不允许编辑
您可以通过调用 ArrayList.ReadOnly 返回一个有效的只读列表。但是它的返回类型是 ArrayList,因此用户仍然可以使用 .Add 进行编译,但会产生运行时错误。
关于c# - "Read only"C# 中的属性访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619396/