假设我有一个句柄类,如:
interface IHasHandle<TObject> {
IHandle<TObject> Handle { get; }
}
interface IHandle<out TObject> {
TObject Value { get; }
}
我想使用这个类来给我一个层次结构中最派生的输出类型。我现在的样子:
interface IAnimal : IHasHandle<IAnimal> { ... }
interface IMammal : IAnimal, IHasHandle<IMammal> { ... }
interface IFeline : IMammal, IHasHandle<IFeline> { ... }
class Tiger : IFeline {
IHandle<IAnimal> IHasHandle<IAnimal>.Handle { get { ... } }
IHandle<IMammal> IHasHandle<IMammal>.Handle { get { ... } }
IHandle<IFeline> IHasHandle<IFeline>.Handle { get { ... } }
public IHandle<Tiger> Handle { get { ... } }
}
这意味着当我有 IAnimal 时,我总是可以得到 IHandle,当我有 IMammal 时,我可以得到 IHandle,等等。
有没有人对此结构有任何一般性评论或关于如何避免所有可能的实现的想法?