Interface

Tуре

Begin

Var

Type

Свойства

Begin

Begin

Begin

Private

Begin

Begin

Begin

Begin

Close( 'Строка символов')

end;

procedureTForml.Button2Click(Sender: TObject);

Close(123)

end;

procedureTForml.Button3Click(Sender: TObject);

Сlоsе(20,300);

end;

procedureTForml.Button4Click(Sender: TObject);

Close

end;

Теперь в раздел private класса TForm1 вставим три объявления методов Close:

{ Private declaratioпs }

procedureClose(S: String); reintroduce; overload;

procedureClose(I: Integer); reintroduce; overload;

procedureClose(I,J: Integer); reintroduce; overload;

И, наконец, в разделе implementation поместим описания объявленных ме­тодов:

procedureTForml.Close(S: String);

Caption := S

end;

procedure TForml.Close(I: Integer);

Caption := IntToStr(I)

end;

 

procedure TForml.close(I,J: Integer);

Caption := IntToStr(i*j)

end;

Теперь после запуска программы три первые кнопки будут вызывать методы Close класса TForm1 и менять заголовок окна, в то время как кнопка Button4 обратится к методу Close родительского класса TForm и закроет окно.

 

 

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

TaClass = class

IntField: Integer;

Function GetField: Integer;

Procedure SetField(Value: Integer);

Property IntegerValue: Integer read GetField write SetField;

end;

В контексте программы свойство ведет себя как обычное поле. Например, можно написать такие операторы:

aClass: TaClass;

Value: Integer;

aClass := TaClass.Create; //Обязательное обращение к конструктору перед

aClass.IntegerValue := 0;

...

Value := aClass.IntegerValue;

...

FreeAndNil(aClass); // Удаление ненужного объекта

end;

 

Возможен и такой оператор присваивания: аClass.IntField := NewValue;

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

Так, например, в использовавшимся нами операторе:

LbOutput.Caption := ‘Строка’;

 

Свойство Caption компонента Lаbеl вызывает метод SetText, который не только запоминает строку символов во внутренней переменной, но и осуществляет прорисовку метки с новым текстом.

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

 

ТаСIаss = сlass

IntFiled : Integer;

ProcedureSetField(Value: Integer);

PropertyIntegerValue: Integer readIntFiled write SetField;

end;

 

Если необходимо, чтобы свойство было доступно только для чтения или только для записи, следует опустить соответственно часть write или read. Вообще говоря, свойство может и не связываться с полем. Фактически оно описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство.

 

Объявление класса

Любой вновь создаваемый класс может содержать секции (разделы), определяемые зарезервированными словами published (опубликованные), private (закрытые), protected (защищенные), public (открытые) и automated (автоматизированные). Внутри каждой секции вначале определяются поля, а затем методы и свойства.

Секции определяют области видимости элементов описания класса. Секция public не накладывает ограничений на область видимости перечисляемых в ней полей, методов и свойств — их можно вызывать в любом другом модуле программы. Секция published также не ограничивает область видимости, однако в ней перечисляются свойства, которые должны быть доступны не только на этапе исполнения, но и на этапе конструирования программы (то есть в окне инспектора объектов). Секция published используется только при разработке нестандартных компонентов. Замечу, что среда Delphi помещает описания компонентов, вставленных в форму, в специальную секцию без названия, которая располагается сразу за заголовком класса и продолжается до первой объявленной секции. Эта секция — published. Программисту не следует помещать в нее собственные элементы описания класса или удалять из нее элементы, вставленные средой. Секция privateсужает область видимости до минимума: закрытые элементы описания доступны только внутри методов данного класса и подпрограммах, находящихся в том же модуле, где описан класс. Элемент, объявленный в секции private,становится недоступным даже ближайшим потомкам класса, если они размещаются в других модулях. Секция protectedдоступна только методам самого класса, а также любым его потомкам, независимо от того, находятся ли они в том же модуле или нет. Наконец, секция automatedиспользуется только для объявления свойств и методов, которые будут добавлены к так называемому интерфейсу ОLЕ-объектов автоматизации; область видимости членов этой секции не ограничена.

В Delphi разрешается сколько угодно раз объявлять любую секцию, причем порядок следования секций не имеет значения. Любая секция может быть пустой.

Следующий фрагмент кода поясняет различные области видимости:

 

UnitUnit1;

UsesControls, Forms;