Мне действительно нужно иметь что-то вроде этого:
interface IReadableVar
{
object Value { get; }
}
interface IWritableVar
{
object Value { set; }
}
interface IReadableWritableVar : IReadableVar, IWritableVar
{
}
Однако, когда я пытаюсь использовать IReadableWritableVar.Value
, я получаю ошибки компиляции, если я явно не использовал базовый интерфейс, например здесь:
static void Main()
{
IReadableWritableVar var = null;
var t = var.Value; // <-- CS0229: Ambiguity between 'IReadableVar.Value' and 'IWritableVar.Value'
var.Value = null; // <-- CS0229: Ambiguity between 'IReadableVar.Value' and 'IWritableVar.Value'
var v = ((IReadableVar)var).Value; // compiles fine
((IWritableVar)var).Value = null; // compiles fine
}
Почему я получаю эти ошибки, хотя все должно быть ясно для компилятора? Есть ли способ исправить эту проблему, кроме кастинга (сотни мест в приложении)?
Обновление: было высказано предположение, что это обман Внедрение двух интерфейсов с свойствами "То же имя" , но это немного отличается, так как в другом случае наследования нет интерфейсы. Во всяком случае, проблема решена сейчас - см. Принятый ответ.