Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С# ЛЕКЦИИ.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.75 Mб
Скачать

Поля методы и свойства класса.

Если элемент базового класса заменяется новым элементом, то это заменяется с помощью слова new. Элемент базового класса объявленного как private, в производном классе недоступны.

Класс наследник может переопределить метод new.

Виртуальные методы

Иногда бывает необходимо что бы решение о том какой из одноименных методов разных объектов иерархии использовать, принималась в зависимости от конкретного объекта, для которого выполняется вызов, для этого жестко связывать эти методы с остальной частью кода нельзя. Таким образом, компилятору надо дать знать, что эти методы будут обрабатываться по другому. В языке C# существует ключевое слово Virtual. Оно записывается в заголовке метода базового класса. Например: Virtual public void Print

Объявление метода виртуальным означает, что все ссылки на этот метод будут разрешаться по факту его вызова, т.е. не на стадии компиляции, а во время выполнения программы. Этот механизм называется поздним связыванием. Для его реализации необходимо чтобы адреса виртуальных методов хранились там, где ими можно будет в любой момент воспользоваться. Поэтому компилятор формирует для этих методов таблицу виртуальных методов.Virtual Method Table.

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

Перегрузка методов.

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

int max (int a, int b)

int max (int a, ref int b)

Рекурсивные методы.

Рекурсивным называется метод, которая вызывает сам себя, такая рекурсия называется прямой. Рекурсия называется косвенной, когда два или более метода вызывают друг друга. Если метод вызывает себя, в стеки создается копия значения его параметров, как при вызове обычного метода. После этого управление передается первому исполняемому оператору метода. При повторном вызове этот процесс повторяется. Для завершения вычислений каждый рекурсивный метод должен иметь одну не рекурсивную ветвь, которая заканчивается оператором возврата. При завершении метода, соответствующая часть стека освобождается, и управление передается вызывающему методу, выполнение которого, продолжается с точки, следующей за рекурсивным вызовом. Рекурсивные методы применяют для реализации рекурсивных алгоритмов и для работы со структурами данных описанных рекурсивно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]