Одноименные методы
В Delphi 4,5 появилась возможность в рамках одного класса иметь несколько одноименных методов. Механизм перекрытия родительского метода одноименным методом потомка приводит к тому, что потомок «не видит» перекрытый родительский метод и может обращаться к нему лишь с помощью зарезервированного слова Inherited. В Delphi 4 введено зарезервированное слово overload (перезагрузить), с помощью которого становятся видны одноименные методы как родителя, так и потомка. Чтобы одноименные методы можно было отличить друг от друга, каждый из них должен иметь уникальный набор параметров. При обнаружении одноименного метода компилятор предупреждает о том, что у класса уже есть аналогичный метод с другими параметрами. Для подавления сообщений объявление одноименного метода можно сопровождать зарезервированным словом reintroduce (вновь ввести).
Пример: В классе Tform1 используется 4 одноименных метода Close. Лишь один из них – унаследованный метод без параметра выполняет свои основные функции – закрывает окно. Три других отличаются набором параметров и выводят сообщения в заголовок окна.
Procedure TForm1.Button1Click(Senter:TObject);
Begin
Close(‘Строка символов’);
End;
Procedure TForm1.Button2Click(Senter:TObject);
Begin
Close(123);
End;
Procedure TForm1.Button3Click(Senter:TObject);
Begin
Close(20,300);
End;
Procedure TForm1.Button4Click(Senter:TObject);
Begin
Close;
End;
В разделе private класса Tform1 вставить 3 объявления методов Close
Private
Procedure Close(S:string); reintroduce; overload;
Procedure Close(I:integer); reintroduce; overload;
Procedure Close(I,J:integer); reintroduce; overload;
Implementation
Procedure Tform1.Close(S:String);
Begin
Caption:=S;
End;
Procedure Tform1.Close(I:Integer);
Begin
Caption:=IntToStr(I);
End;
Procedure Tform1.Close(I,J:Integer);
Begin
Caption:=IntToStr(I*J);
End;
3. Свойства. Свойства – это специальный механизм классов, регулирующий доступ к полям. Свойства объявляются с помощью зарезервированных слов property, read и write (слова read и write считаются зарезервированными только в контексте объявления свойства). Обычно свойство связано с некоторым полем и указывает те методы класса, которые должны использоваться при записи в это поле или при чтении из него.
Type
TClass=class
IntField:integer;
Function GetField:Integer;
Procedure setField(value:Integer);
Property IntegerValue:Integer read GetField write SetField;
В контексте программы свойство ведет себя как обычное поле.
Var
aClass:TClass;
value:Integer;
begin
aClass:=TClass.Create; {Обязательно! Перед обращением к полю или свойству!}
aClass.IntegerValue:=0;
Value:=aClass.IntegerValue;
End;
Разница между оператором
aClass.IntField:=NewValue;
и оператором
aClass.IntegerValue:=NewValue;
заключается в том, что при обращении к свойству автоматически подключается метод SetField, в котором могут реализовываться специальные действия.
Если необходимо, чтобы поле было доступно только для чтения или только для записи, следует опустить часть write или read. Вообще говоря, свойство сожжет и не связываться с полем. Фактически оно описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство.