Пока я знаю, мы не можем напрямую преобразовать базовый класс в производный (под) класс, потому что база не является экземпляром производного и, следовательно, ll приведет к null.Преобразование базового класса в производный класс не приводит к нулю
У меня есть два класса, один происходит от другого. Я пытаюсь понять, почему я могу преобразовать baseClass1 в Sub, не приводя к нулю, пока я не могу преобразовать baseClass2 в Sub, потому что он приводит к null.
Base baseClass1 = new Sub(); // The result is an instance of Base
Base baseClass2 = new Base(); // Same thing
Sub subClass1 = (Sub)baseClass1; // Doesn't result in null
Sub subClass2 = (Sub)baseClass2; // Does result in null
baseClass1 является экземпляром базы, даже если я использовал Sub() конструктор. Но использование конструктора Sub() каким-то образом позволяет мне преобразовать экземпляр Base в экземпляр Sub, даже не потеряв значения, которые содержат дополнительные члены класса Sub (скажем, я передал эти значения через конструктор Sub() в первом линия).
Какова логика этого? Какова истинная разница между baseClass1 и baseClass2, хотя они оба являются экземплярами Base?
Вы можете _treat_ ссылаться на _Sub_ как ссылку на _Base_, но это не значит, что базовый тип (фактический тип) изменится. – chomba
Второе приведение должно приводить к недействительности InvalidCastException. –