限制从班级外部访问财产

时间:2019-03-22 05:52:23

标签: c#

让我们上这个课:

ExampleClass
{
    public List<string> MyValue { get; set; }
}

问题是如何限制外部类对该属性的修改,即向集合添加对象,创建new()。

2 个答案:

答案 0 :(得分:0)

您可以拥有这样的东西

public ReadOnlyCollection<string> MyValue {get; private set;}

答案 1 :(得分:0)

您可以将其显示为IEnumerable<string>而不是列表。该界面不允许添加。您仍然可以将其存储为内部列表,也可以存储为私有字段,以便类本身可以根据需要添加或删除。

例如:

class ExampleClass
{
    private List<string> _myValue = new List<string>();

    public IEnumerable<string> MyValue
    {
        get
        {
            foreach (var s in _myValue) yield return s;
        }
    }
}

如果呼叫者想使用自己的列表,它当然可以这样做:

var list = exampleClass.MyValue.ToList();

此时,调用者拥有它,很明显,它选择添加的任何内容都与原始列表无关。