【发布时间】:2015-05-21 14:40:58
【问题描述】:
我有这个示例代码。我要做的是使“Nums”值只能使用“AddNum”方法写入。
namespace ConsoleApplication1
{
public class Person
{
string myName = "N/A";
int myAge = 0;
List<int> _nums = new List<int>();
public List<int> Nums
{
get
{
return _nums;
}
}
public void AddNum(int NumToAdd)
{
_nums.Add(NumToAdd);
}
public string Name { get; set; }
public int Age { get; set; }
}
}
不知何故,我尝试了很多关于 AsReadOnly() 和 readonly 关键字的事情,但我似乎无法让它做我想做的事情。
这是我必须访问该属性的代码示例。
Person p1 = new Person();
p1.Nums.Add(25); //access 1
p1.AddNum(37); //access 2
Console.WriteLine("press any key");
Console.ReadLine();
我真的希望“访问 1”失败,并且“访问 2”是可以设置值的唯一方式。提前感谢您的帮助。
【问题讨论】:
-
您在自己的标签中指向它:使用
ReadOnlyCollection作为您的属性或只是在其中复制您的列表(这样用户可以更改他的副本但不能更改您的内部状态) -
尝试让 Nums 成为一个返回数组而不是 List 的函数。
-
使用“私有列表
Nums”而不是公共列表 Nums -
我认为你不能。但是您可以删除属性“Nums”并提供一些从外部访问它的方法。
标签: c# list class readonly-collection