Вы спрашиваете это:
class Animal { }
class Cat : Animal { }
class ShortHairedCat : Cat { }
ShortHairedCat shortHairedCat = (ShortHairedCat)new Cat();
Является ли Cat
a ShortHairedCat
?Не обязательно.В данном конкретном случае new Cat()
- это Cat
, а не ShortHairedCut
, поэтому, конечно, вы получаете исключение времени выполнения.
Помните, что модели наследования - это отношения .Это не обязательно тот случай, когда Base
является Derived
, поэтому, в общем, «уныние» опасно.