1. Понятие позднего и раннего связывания. Ключевые слова virtual, override


Download 0.51 Mb.
bet1/17
Sana01.09.2023
Hajmi0.51 Mb.
#1672075
  1   2   3   4   5   6   7   8   9   ...   17
Bog'liq
C# да ПОЛИМОРФИЗМ ва ИНТЕРФЕЙСЛАР


Содержание

  • 1. Понятие позднего и раннего связывания. Ключевые слова virtual, override

  • 2. Что такое полиморфизм? Динамический полиморфизм

  • 3. Для каких элементов класса можно применять полиморфизм?

  • 4. Схематическое объяснение полиморфизма

  • 5. Полиморфизм в случае передачи в метод ссылки на базовый класс. Позднее связывание

  • 6. Какие требования накладываются на элемент класса для того, чтобы он поддерживал полиморфизм?

  • 7. Использование ключевого слова new в цепочке виртуальных методов. Пример

  • 8. Пример классов Figure->Rectangle->RectangleColor, демонстрирующих полиморфизм

  • Связанные темы

1. Понятие позднего и раннего связывания. Ключевые слова virtual, override
При изучении темы полиморфизма важно понять понятие позднего и раннего связывания, которое используется компилятором при построении кода программы в случае наследования.
Если классы образовывают иерархию наследования, то при обращении к элементам класса, компилятор может реализовывать один из двух возможных способов связывания кода:

  1. Раннее связывание – связанное с формированием кода на этапе компиляции. При раннем связывании, программный код формируется на основе известной информации о типе (класс) ссылки. Как правило, это ссылка на базовый класс в иерархии классов.

  2. Позднее связывание – связанное с формированием кода на этапе выполнения. Если в иерархии классов встречается цепочка виртуальных методов (с помощью слов virtual, override), то компилятор строит так называемое позднее связывание. При позднем связывании вызов метода происходит на основании типа объекта, а не типа ссылки на базовый класс. Позднее связывание используется, если нужно реализовать полиморфизм.

Выбор того или иного вида связывания для каждого отдельного элемента (метода, свойства, индексатора и т.п.) определяется компилятором по следующим правилам:

  • если в иерархии унаследованных классов объявляется невиртуальный элемент, то реализуется раннее связывание;

  • если в иерархии унаследованных классов объявляется виртуальный элемент, то выполняется позднее связывание (рисунки 1, 2). Виртуальный элемент в базовом классе обозначается ключевым словом virtual, во всех унаследованных классах ключевым словом override. В C# виртуальным элементом может быть метод, событие, индексатор или свойство.


Download 0.51 Mb.

Do'stlaringiz bilan baham:
  1   2   3   4   5   6   7   8   9   ...   17




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling