次のようなハンドル クラスがあるとします。
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 を取得できます。
考えられるすべての実装を回避する方法について、この構造またはアイデアに関する一般的なコメントはありますか?