在内部(在同一程序集内)将项添加到 ReadOnlyCollection 的最佳方法
本文关键字:ReadOnlyCollection 方法 最佳 添加 程序集 在内部 | 更新日期: 2023-09-27 17:56:44
我有以下类:
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();
}
}
我意识到,如果我在Foo
中拥有这样的私人List<Bar>
会更容易:
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。