Вы ничего не можете сделать, кроме определения нового интерфейса с новым свойством чтения / записи.Это потому, что нет понятия наследования, когда речь идет об интерфейсах;скорее интерфейс, такой как IMutableFoo
, обещает, что его разработчики также будут реализовывать интерфейс IFoo
.Оба интерфейса, однако, были определены независимо и остаются независимыми.
Документация MSDN содержит фразу "интерфейсы могут наследовать другие интерфейсы" , но это ИМХО вводит в заблуждение, посколькуздесь нет наследства.«Производный» интерфейс просто описывает больший набор элементов, которые должны быть реализованы, чем «базовый» интерфейс.
Реализаторы интерфейса, такие как IMutableFoo
, могут предоставить семантику, на которую вы нацелены, без проблем, явнореализация IFoo
и совместное использование кода между получателями IMutableFoo.Id
и IFoo.Id
:
class Foo : IMutableFoo {
// IFoo is implemented explicitly
// "this" is of type Foo, and since IMutableFoo is implemented
// implicitly below, this.Id accesses the Id declared in IMutableFoo
Int32 IFoo.Id { get { return this.Id; } }
// IMutableFoo is implemented implicitly
// It could also be implemented explicitly, but the body of the
// IFoo.Id getter would need to change ("this" would no longer work)
public Int32 Id { get; set; }
}
К сожалению, нет механизма, который заставляет разработчиков сделать это, но есть хорошая документацияздесь можно пройти долгий путь - даже больше, если отношения между IFoo
и IMutableFoo
интуитивны.