如果您有一个包含对象集合的接口,并且您希望同时使用接口的只读和读写版本,该怎么办?
本文关键字:接口 读写 只读 版本 怎么办 希望 对象 包含 有一个 集合 如果 | 更新日期: 2024-10-30 04:43:41
我目前正在为包含对象集合的用户控件创建一些接口。我想为可以从外部添加对象的控件提供一个接口,为不能从外部添加对象的控件提供另一个接口。到目前为止,我基本上有以下内容(针对此问题进行了简化;如果它可以帮助您查看我迄今为止的实际代码,请告诉我):
public interface IReadableFoo
{
IReadOnlyCollection<Foo> Foos { get; }
}
public interface IReadWriteFoo : IReadOnlyFoo
{
new ICollection<Foo> Foos { get; }
}
在这种情况下,当您有一个包含对象集合的接口,并且您希望同时拥有只读版本和读写版本时,应该做什么?让一个ICollection<Foo>
像这样遮蔽IReadOnlyCollection<Foo>
被认为是可以接受的吗?
我应该使用其他模式吗?IReadOnlyFoo
和 IReadWriteFoo
都应该继承自公共基本接口IFoo
吗?
编辑:为了澄清我正在尝试做什么,我在这里添加了我正在使用的实际代码:
public interface IOptionSelector<T>
{
IReadOnlyCollection<T> Options { get; }
T SelectedOption { get; }
event EventHandler SelectedOptionChanged;
}
public interface IWriteableOptionSelector<T> : IOptionSelector<T>
{
new ICollection<T> Options { get; }
new T SelectedOption { get; set; }
}
这是你应该做的:
public interface IOptionSelector<T>
{
event EventHandler SelectedOptionChanged;
}
public interface IReadOnlyOptionSelector<T> : IOptionSelector<T>
{
IReadOnlyCollection<T> Options { get; }
}
public interface IWritableOptionsSelector<T> : IOptionSelector<T>
{
ICollection<T> Options { get; }
}
只读和可写是两个独立的问题。 当您必须在编写的方法上使用 new 关键字时,这清楚地表明您正在处理单独的问题并需要重新考虑您的设计。