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;