Обратите внимание на разницу между экземпляром объекта и ссылкой.
new Child();
создает (создает экземпляр) класс Child.Это означает, что теперь есть объект (в «куче»), но у вас нет прямого доступа к этому объекту, у вас есть косвенный доступ через ссылки на него.Как только объект создан, вы не можете изменить его тип.
Child ch;
определяет ссылку с дочерним интерфейсом, которая по умолчанию не ссылается на объект (IE: null)
Parent parent;
определяет ссылку с родительским интерфейсом.
Как только эти ссылки существуют, вы можете назначить их объектам, используя такие строки, как:
parent = new Parent();
или
ch = new Child();
Поскольку Child наследует от Parent (как уже говорили другие, это «является Parent»), ссылки Parent могут также ссылаться на объекты Child.IE:
parent = new Child();
или
parent = ch;
, но вы сможете получить доступ только к тем частям объекта Child, которые определены Parent, через ссылку Parent.Обратите внимание, что приведение не обязательно для этого.Тем не менее, вам понадобится бросок в другом направлении.То есть, если это все еще дочерний объект, но у вас пока есть только родительская ссылка, вам нужно преобразование, чтобы получить дочернюю ссылку:
ch = (Child)parent;
или
ch = parent as Child;
Первый бросит исключение, если приведение не может быть выполнено.Последний назначит ноль для ch, если приведение не может быть выполнено.