Нет, предположим следующее:
class D : B {}
C c = new C();
c.TheObject = new D(); // error. D is not A, A is not D
С выше классом я все еще могу использовать D
с объектами, реализующих интерфейс I
, но давайте предположим, что я хочу, чтобы установить TheObject
свойство экземпляр C
к экземпляру D
. Я не могу, потому что D
и A
являются братьями и сестрами. Они оба наследуются от одного и того же класса, и все будет в порядке, так как они находятся в интерфейсе, но объявляют, что вы ожидаете, что компилятор задает A
. Экземпляр A не является экземпляром D, но экземпляры A и D являются экземплярами B.
Это правило следует за Liskov Substitution Principle.
P.S. Я хочу поблагодарить Troels Knak-Nielsen за открытие моего ума об этой тонкости.
Если бы это было возможно, это наверняка смутило будущих сопровождающих вашего кода. Каковы ваши намерения? Вероятно, вам следует реорганизовать, если вы столкнулись с этой проблемой. –