если у меня есть интерфейсы:
public interface ANewThing { IKey Key { get; } }
public interface AnOldThing { object Key{ get; } }
public interface ACompositeThing : ANewThing , AnOldThing { }
, и я пишу это:
ACompositeThing compositeThing = GetCompositeThing();
Trace.WriteLine(compositeThing.Key);
он не компилируется, жалуясь, что вызов Key
неоднозначен (это нене имеет значения, если тип, возвращаемый свойством Key
, совпадает).Я знаю, что в классе, реализующем ACompositeThing
, я могу явно реализовать интерфейсы ANewThing
и AnOldThing
, но это не помогает мне, когда у меня есть методы, которые не знают о конкретных реализациях и знают только, что онибудет дан ACompositeThing
.
Итак, мой вопрос:
Могу ли я что-нибудь сделать в интерфейсе ACompositeThing
, чтобы сказать, как следует разрешить неоднозначность свойства Key
?
Как, скажем, «при доступе к свойству Key
через этот интерфейс всегда возвращать свойство Key
из реализации ANewThing
»?
Или я должен признать, что я не могу этого сделать и должен всегда приводить мой ACompositeThing
к одному из других интерфейсов, прежде чем я сделаю доступ?