Нет, то, что вы пытаетесь сделать, невозможно. Неявное преобразование reference - это не то же самое, что неявное преобразование type . Ваш код определяет неявное преобразование типов, в котором вы можете сделать следующее:
B foo = new B();
A bar = foo;
Обратите внимание, однако, что foo
и bar
теперь содержат разные ссылки. Неявное преобразование типов создает новый экземпляр A
, который должен (по соглашению) логически эквивалентен foo
. Но дело в том, что это другая ссылка.
Преобразование
A reference происходит тогда, когда сама ссылка не изменяется, что означает, что рассматриваемый тип должен либо наследовать (для классов), либо реализовывать (для интерфейсов) рассматриваемый тип. Если я сделаю это:
class A { }
class B : A { }
Тогда мой код выше будет теперь содержать ту же ссылку в foo
и bar
. Это то, что подразумевается под неявным ссылочным преобразованием. И наоборот, явное эталонное преобразование будет пониженным, например:
A foo = new B();
B bar = (B)foo;
Опять же, ссылки те же, но приведение было явным.
Итак, вкратце, документация MSDN более четкая, но менее точная.