【问题标题】:Restrict access to property from outside the class [duplicate]限制从班级外部访问财产[重复]
【发布时间】:2019-03-22 05:52:23
【问题描述】:

让我们来上课吧:

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

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    你可以有这样的东西

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

    【讨论】:

      【解决方案2】:

      您可以将其公开为 IEnumerable&lt;string&gt; 而不是列表。此接口不允许添加。您仍然可以在内部将其存储为列表,作为私有字段,以便类本身可以根据需要添加或删除。

      例如:

      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();
      

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

      【讨论】:

        猜你喜欢
        • 2016-03-12
        • 2011-08-09
        • 1970-01-01
        • 2013-12-09
        • 2014-01-13
        • 2017-11-05
        • 2015-10-07
        • 1970-01-01
        • 2017-11-29
        相关资源
        最近更新 更多