我有一个包含集合(Collection<MyItem> myItems
)的类。我希望能够私下修改此 Collection 并通过公共属性将其作为只读返回(如果可能,在 O(1) 中)。我正在考虑使用 a ReadOnlyCollection
,但问题是项目 ( MyItem
) 不是只读的。所以我创建了一个只读包装类(ReadOnlyMyItem
)。如何通过方括号运算符ReadOnlyCollection
返回包装类 ( ReadOnlyMyItem
) 而无需再次构建整个 Collection,我希望一切都保持 O(1)。
我正在考虑创建一个派生自ReadOnlyCollection
( class ReadOnlyMyCollection : ReadOnlyCollection<MyItem>
or class ReadOnlyMyCollection : ReadOnlyCollection<ReadOnlyMyItem>
) 的新类,它通过方括号运算符返回只读包装类 ( ReadOnlyMyItem
),但是方括号运算符未标记为虚拟并且返回类型甚至不相同或构造函数没有要使用IList
的包装类 ( IList<ReadOnlyMyItem>
)。ReadOnlyMyCollection
我应该从头开始构建类 ( ) 吗?
代码看起来像这样:
public class MyClass
{
public ReadOnlyCollection<ReadOnlyMyItem> MyItems { get => GetMyItems(); }
private List<MyItem> myItems;
// ...
private ReadOnlyCollection<ReadOnlyMyItem> GetMyItems()
{
throw new NotImplementedException();
}
// ...
}
public class MyItem
{
// ...
}
public class ReadOnlyMyItem
{
private readonly MyItem myItem;
// ...
public ReadOnlyMyItem(MyItem myItem) => this.myItem = myItem;
// ...
}