Это "вентиляционный".
Представьте себе иерархию наследования как идущую сверху вниз от наименее производной к большинству производных типов. То, что вы делаете в приведенном выше примере, обрабатывает более производный тип как менее производный тип. Вы эффективно идете «вверх» через иерархию наследия наследования - следовательно, up cast.
Вы можете сделать это, так как гарантировано, что у более производного типа будет все, чем меньше выведено (но не наоборот).
BTW, вы повторно не изменяя тип объекта, вы просто сделать другую ссылку на него, и что ссылка случается ограничить вас только менее производном «часть» объекта.
Это основа полиморфизма. Когда вы вызываете inintro.DoExecute()
в строке ниже, он будет делать это через так называемую «динамическую отправку» (не путать с типом dynamic) и выбрать метод, основанный на типе времени выполнения объекта. Это не особенно полезно в этом случае, так как вы можете просто a.DoExecute()
, но это один из основных методов организации больших программ, где время выполнения определенного объекта может быть неизвестно заранее.
Вы имеете в виду «назначение»? –