我有以下类(class):
public class Foo
{
public List<Bar> Bars {get; internal set;}
}
现在我想制作Bars
一个ReadOnlyCollection
这样 Bars
的内容不能公开更改:
public class Foo
{
public ReadOnlyCollection<Bar> Bars {get; internal set;}
}
现在,如果我在同一个程序集中有一个类需要将项目添加到 Bars
,最好的方法是什么?
这就是我现在的做法:
public class FooHelper
{
public FooHelper()
{
Foo foo = new Foo();
//Code to modify the collection
List<Bar> bars = foo.Bars.ToList<Bar>();
bars.Add(new Bar("BAR BAR BAR"));
foo.Bars = bars.AsReadOnly();
}
}
我意识到如果我有一个 Private List<Bar>
会更容易在Foo
像这样:
public class Foo
{
private List<Bar> _bars;
public ReadOnlyCollection<Bar> Bars {get { return _bars.AsReadOnly; }}
}
...但是使用这种方法,我将如何向 _bars
添加一个项目? ?
我应该将其设为内部,设为内部属性,还是添加新的内部 AddBar()
方法?
最佳答案
我个人会去添加一个内部 AddBar 方法,如下所示:
public class Foo
{
private List<Bar> _bars;
public ReadOnlyCollection<Bar> Bars {get { return _bars.AsReadOnly; }}
internal void AddBar(Bar bar)
{
_bars.Add(bar);
}
}
其他程序集将看到只读集合,使其不可变。同一程序集中的代码将只能添加 Bar 项目,为您提供“防御性”API。
关于c# - 在内部(在同一程序集中)将项目添加到 ReadOnlyCollection<T> 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6027855/