Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Екзамен з комп. арх..doc
Скачиваний:
4
Добавлен:
17.09.2019
Размер:
449.02 Кб
Скачать

14. Віртуальні функції та абстрактні класи в мові c#.

Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров.

Модификатор abstract указывает на то, что класс может быть использован только как базовый класс при наследовании. Абстрактные классы могут содержать абстрактные методы и методы доступа. Создавать экземпляры абстрактного класса нельзя. Неабстрактный класс, являющийся производным от абстрактного, должен содержать фактические реализации всех наследуемых абстрактных методов и методов доступа. Чтобы указать отсутствие реализации в методе или свойстве, воспользуйтесь модификатором abstract в объявлении метода или свойства. Абстрактный метод - это неявный виртуальный метод. Объявления абстрактных методов допускаются только в абстрактных классах. Поскольку объявление абстрактного метода не предоставляет фактической реализации, тело метода отсутствует, объявление метода просто заканчивается точкой с запятой, аналогично объявлению прототипов:

public abstract void AbstractMethod();

Реализация предоставляется методом переопределения override, который является членом неабстрактного класса.

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

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

--

Виртуальный метод (virtual) — в объектно-ориентированном программировании метод (функция) класса, который может быть переопределён в классах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения. Таким образом, программисту необязательно знать точный тип объекта для работы с ним через виртуальные методы: достаточно лишь знать, что объект принадлежит классу или наследнику класса, в котором метод объявлен.

Виртуальные методы — один из важнейших приёмов реализации полиморфизма. Они позволяют создавать общий код, который может работать как с объектами базового класса, так и с объектами любого его класса-наследника. При этом базовый класс определяет способ работы с объектами и любые его наследники могут предоставлять конкретную реализацию этого способа.

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

Совершенно тривиальная идея. Функция которую можно переопределить в новом классе. А если ее не переопределять? То вызовется функция предка.