首页 > 解决方案 > 限制从课堂外访问财产

问题描述

让我们上这堂课:

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

问题是如何限制外部类修改该属性,意味着将对象添加到集合中,生成 new()。

标签: c#

解决方案


您可以将其公开为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();

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


推荐阅读