Предположим, у меня есть класс дескриптора, такой как:
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 и т. Д.
У кого-нибудь есть общие замечания по этой структуре или идеи о том, как избежать всевозможных реализаций?