Override / Vitual / Dynamic-методы
01.01.2007
Mark
Если метод в классе предка объявлен как виртуальный (virtual) или динамический (dynamic), вам необходимо перекрыть его во всех классах-наследниках. Если вы объявляете унаследованный метод виртуальным или динамическим, вы начинаете строить его новое виртуальное/динамическое дерево наследования. Допустим, у нас есть следующая иерархия: A (родитель) - B - C - D. Если вы объявляете метод как виртуальный (или динамический) в A, перекрываете в B, создаете виртуальным в C и перекрываете в D, вот что получается:
| фактический класс | класс, используемый для доступа к методу | класс, использующий метод |
|---|---|---|
| D | D | D |
| D | C | D |
| D | B | B |
| D | A | B |
| C | C | C |
| C | B | B |
| C | A | B |
| B | B | B |
| B | A | B |
Вывод: работа виртуального/динамического наследования прекращается в момент создания одноименного виртуального/динамического метода наследниками класса.

