C# 相当于类内集合的getter/setter

C# 相当于类内集合的getter/setter,c#,scope,encapsulation,C#,Scope,Encapsulation,我的课程如下: public class Document { public List<DocumentSection> sections = new List<DocumentSection>(); ... 公共类文档 { 公共列表部分=新列表(); ... 各种各样的问题涉及这样一种情况:属性需要从类内部可写,但只能从类外部读取(http://stackoverflow.com/questions/4662180/c-sharp-public-va

我的课程如下:

public class Document
{
    public List<DocumentSection> sections = new List<DocumentSection>();
    ...
公共类文档
{
公共列表部分=新列表();
...
各种各样的问题涉及这样一种情况:属性需要从类内部可写,但只能从类外部读取(http://stackoverflow.com/questions/4662180/c-sharp-public-variable-as-writeable-inside-the-clas-but-readonly-outside-the-cl)

我也希望这样做,但是对于这个集合-允许从类内添加到它,但是只允许用户在它之外的时候遍历它。这是否可行


谢谢

将集合公开为
IEnumerable
,这样用户只能对其进行迭代

public class Document {
   private List<DocumentSection> sections;

   public IEnumerable<DocumentSection> Sections 
   { 
       get { return sections; }
   }
}
公共类文档{
私人名单部分;
公共可数部分
{ 
获取{返回节;}
}
}

将集合公开为
IEnumerable
,以便用户只能对其进行迭代

public class Document {
   private List<DocumentSection> sections;

   public IEnumerable<DocumentSection> Sections 
   { 
       get { return sections; }
   }
}
公共类文档{
私人名单部分;
公共可数部分
{ 
获取{返回节;}
}
}

是的,您必须隐藏列表,并且只公开Add方法和类型为
IEnumerable
的属性:

公共类文档
{
私有列表部分=新列表();
公共无效添加部分(文档部分){
节。添加(节);
}
公共可数部分{
获取{返回节;}
}
}

是的,您必须隐藏列表,并且只公开Add方法和类型为
IEnumerable
的属性:

公共类文档
{
私有列表部分=新列表();
公共无效添加部分(文档部分){
节。添加(节);
}
公共可数部分{
获取{返回节;}
}
}

您可以将列表公开为一个
IEnumerable
,并且只能在内部使用
列表。如下所示:

public class Document {
  public IEnumerable<DocumentSection> Sections { get { return list; } }
  private List<DocumentSection> list;
}
公共类文档{
公共IEnumerable节{get{return list;}}
私人名单;
}

您可以将列表公开为一个
IEnumerable
,并且只能在内部使用
列表。如下所示:

public class Document {
  public IEnumerable<DocumentSection> Sections { get { return list; } }
  private List<DocumentSection> list;
}
公共类文档{
公共IEnumerable节{get{return list;}}
私人名单;
}

如果确实只允许迭代,可以将IList保持为私有,但将公共函数解析为GetEnumerator()

如果确实只允许迭代,可以将IList保持为私有,但将公共函数解析为GetEnumerator()

公共类文档{
私有只读列表节=新列表();
公共可数部分
{ 
得到
{ 
锁(本节)
{
返回节。ToList();
}
}
}
}
公共类文档{
私有只读列表节=新列表();
公共可数部分
{ 
得到
{ 
锁(本节)
{
返回节。ToList();
}
}
}
}

非常感谢简,非常感谢。非常感谢简,非常感谢。