47. Свойства классов. Понятие, описание, пример использования. Секции описания классов. Одноименные методы. Перегружаемые методы. Методы класса.
Свойства классов. Понятие, описание, пример использования.
Свойство – средство доступа к полям, которые прямо не доступны. Свойства (они published) дают доступ к полям, напрямую недоступным (они private). Формат свойства:
property <Имя>[Индексы]:<Тип> index <Число> Спецификаторы;
Имя имеет индексы, если свойство – массив. index <Число> присутствует, если свойство – массив. Спецификаторы – определяют действия со свойствами.
Пример:
type
TNewClass=class(TObject)
private
FCode:integer;
FNote:string;
published
property Code:Integer read FCode write FCode;
property Note:String read FNote;
end;
Секции описания классов.
<...>
Одноименные методы.
<...>
Перегружаемые методы.
В языке Delphi существует возможность дать двум и более процедурам (функциям) одинаковые идентификаторы при условии, что все такие процедуры (функции) отличаются списком параметров. Такая возможность называется перегрузкой. Для указания того, что процедура (функция) перегружена, служит стандартная директива overload:
procedure Increment(var Value: Integer); overload;
procedure Increment(var Value: Real); overload;
Какую именно процедуру использовать в том или ином случае компилятор будет определять на этапе компиляции программы по типам фактических аргументов, передаваемых при вызове.
Методы класса.
Метод – подпрограмма (процедура или функция), являющаяся членом класса. Объектные методы подобны обычным процедурам и функциям, только они имеют еще экстра-параметр self.
Формат вызова метода: <Объект>.<Метод>. Метод объявляется в классе, как обычная подпрограмма с директивой forward. В описании класса находится заголовок метода, а код метода в разделе реализации метода, где имеет составное имя, включающее тип класса. Способ вызова метод, объявленного в классе, задается модификатором метода, вводимым после заголовка метода через точку с запятой. Если модификатора нет, то метод считается статическим и вызывается, как обычная подпрограмма. Методы могут быть:
Классы имеют виртуальные методы, а объекты – нет. Это и есть отличие между ними. Для объектов достаточно переобъявить тот же метод в объекте потомка с ключевым словом virtual для перекрытия. Для классов ситуация несколько иная: виртуальные методы должны быть перекрыты с ключевым словом override. Если так не сделать, запустится тот же виртуальный метод, скрывающий предыдущий. Ключевое слово Inherited не перескочит на унаследованный метод, если было использовано virtual.