Какая именно виртуальная функция нужна C #? - PullRequest
0 голосов
/ 24 августа 2009

Я понимаю, что он обеспечивает реализацию по умолчанию, которую производные классы могут переопределять. Но является ли это точной целью?

Ответы [ 5 ]

10 голосов
/ 24 августа 2009

Нет, это не их точная цель. Виртуальные функции - это средство достижения полиморфизма типа на объектно-ориентированном языке.

2 голосов
/ 24 августа 2009

Необходимость в том, что производные классы могут переопределять, и они ведут себя так, как вы ожидаете.

Обратное происходит при создании метода в производном классе с указанием ключевого слова new - в этой ситуации используется версия функции, которая соответствует типу переменной, поэтому:

derived foo = new derived();
base foo2 = foo;

foo2.bar(); // If bar() is virtual, and overriden in derived, it will use that implementation.
foo.bar(); // if bar() is not virtual, this may be calling a completely different function, if derived defines a new version
2 голосов
/ 24 августа 2009

Теперь вы можете иметь коллекцию ссылок на объекты базового класса и помещать туда ссылки на объекты производных классов, вызывать виртуальную функцию через любую из ссылок, не зная фактического производного класса, и каждый раз вызывать самую производную переопределенную функцию. Это называется полиморфизмом.

2 голосов
/ 24 августа 2009

Да, это точная цель

1 голос
/ 24 августа 2009

Для достижения полиморфизма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...