Ian*_*Ian 4 c# collections design-patterns
我有以下课程:
public class Foo
{
public List<Bar> Bars {get; internal set;}
}
Run Code Online (Sandbox Code Playgroud)
现在我想制作Bars一个不能公开改变ReadOnlyCollection的内容Bars:
public class Foo
{
public ReadOnlyCollection<Bar> Bars {get; internal set;}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我在同一个程序集中有一个需要添加项目的类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();
}
}
Run Code Online (Sandbox Code Playgroud)
我意识到如果我有这样的Private List<Bar>in 会更容易Foo:
public class Foo
{
private List<Bar> _bars;
public ReadOnlyCollection<Bar> Bars {get { return _bars.AsReadOnly; }}
}
Run Code Online (Sandbox Code Playgroud)
...但是通过这种方法,我将如何添加项目_bars?
我应该将其设为内部,使其成为内部属性,还是添加新的内部AddBar()方法?
Col*_*inE 10
我个人会去添加一个内部的AddBar方法,如下所示:
public class Foo
{
private List<Bar> _bars;
public ReadOnlyCollection<Bar> Bars {get { return _bars.AsReadOnly; }}
internal void AddBar(Bar bar)
{
_bars.Add(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
其他程序集将看到readonly集合,使其不可变.同一个程序集中的代码只能添加Bar项,为您提供"防御性"API.
| 归档时间: |
|
| 查看次数: |
4847 次 |
| 最近记录: |