Почему C# не позволяет делать Downcast от родителя к потомку?
Интересно, почему C# принципиально не позволяет расширять базовый экземпляр, как в этом коде?
Потому, что объект создан и занимает в памяти 20 байт. И о не как не может кастнуться в объект который должен занимать 20 Мб.
Поэтому вам как не крути придётся создавать новый экземпляр.
Почему для вас выглядит логичным каст экземпляра родителя в экземпляр потомка? А если потомок определяет особенные условия, которые нужны для его создания? А зависимости?