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

Одноименные методы

В 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. Вообще говоря, свойство сожжет и не связываться с полем. Фактически оно описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство.