Tуре
Begin
Var
Type
Свойства
Begin
Begin
Begin
Private
Begin
Begin
Begin
Begin
Close('Строка символов')
end;
procedure TForml.Button2Click(Sender: TObject);
Close(123)
end;
procedure TForml.Button3Click(Sender: TObject);
Сlоsе(20,300);
end;
procedure TForml.Button4Click(Sender: TObject);
Close
end;
Теперь в раздел private класса TForm1 вставим три объявления методов Close:
{ Private declaratioпs }
procedure Close(S: String); reintroduce; overload;
procedure Close(I: Integer); reintroduce; overload;
procedure Close(I,J: Integer); reintroduce; overload;
И, наконец, в разделе implementation поместим описания объявленных методов:
procedure TForml.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;
Procedure SetField(Value: Integer);
Property IntegerValue: Integer read IntFiled write SetField;
end;
Если необходимо, чтобы свойство было доступно только для чтения или только для записи, следует опустить соответственно часть write или read. Вообще говоря, свойство может и не связываться с полем. Фактически оно описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство.
Объявление класса
Любой вновь создаваемый класс может содержать секции (разделы), определяемые зарезервированными словами published (опубликованные), private (закрытые), protected (защищенные), public (открытые) и automated (автоматизированные). Внутри каждой секции вначале определяются поля, а затем методы и свойства.
|
|
Секции определяют области видимости элементов описания класса. Секция public не накладывает ограничений на область видимости перечисляемых в ней полей, методов и свойств — их можно вызывать в любом другом модуле программы. Секция published также не ограничивает область видимости, однако в ней перечисляются свойства, которые должны быть доступны не только на этапе исполнения, но и на этапе конструирования программы (то есть в окне инспектора объектов). Секция published используется только при разработке нестандартных компонентов. Замечу, что среда Delphi помещает описания компонентов, вставленных в форму, в специальную секцию без названия, которая располагается сразу за заголовком класса и продолжается до первой объявленной секции. Эта секция — published. Программисту не следует помещать в нее собственные элементы описания класса или удалять из нее элементы, вставленные средой. Секция private сужает область видимости до минимума: закрытые элементы описания доступны только внутри методов данного класса и подпрограммах, находящихся в том же модуле, где описан класс. Элемент, объявленный в секции private, становится недоступным даже ближайшим потомкам класса, если они размещаются в других модулях. Секция protected доступна только методам самого класса, а также любым его потомкам, независимо от того, находятся ли они в том же модуле или нет. Наконец, секция automated используется только для объявления свойств и методов, которые будут добавлены к так называемому интерфейсу ОLЕ-объектов автоматизации; область видимости членов этой секции не ограничена.
В Delphi разрешается сколько угодно раз объявлять любую секцию, причем порядок следования секций не имеет значения. Любая секция может быть пустой.
Следующий фрагмент кода поясняет различные области видимости:
Unit Unit1;
Uses Controls, Forms;