Для определения области видимости в Delphi используются спецификаторы доступа: public, private, protected.
· Поля, свойства и методы, находящиеся в секции public, не имеют ограничений на видимость. Они доступны из других функций и методов объектов, как в данном модуле, так и во всех прочих, ссылающихся на него.
· Поля, свойства и методы, находящиеся в секции private, доступны только в методах класса и в функциях, содержащихся в том же модуле, что и описываемый класс. Такая директива позволяет скрыть детали внутренней реализации класс от всех.
· Поля, свойства и методы, находящиеся в секции protected, доступны для любых объектов внутри данного модуля, а также для объектов классов — наследников данного класса в других модулях. Объекты из других модулей, классы которых не являются наследниками данного класса, защищенных элементов не видят.
Пример:
unit First;
type
TFirstObj = class;
public
procedure method1;
private
procedure method2;
protected
procedure method3;
end;
procedure proc1;
var AFirstObj: TFirstObj;
…
procedure proc1;
begin
AFirstObj:=TFirstObj.Create;
AFirstObj.method1; {можно}
AFirstObj.method2; {можно}
AFirstObj.method3; {Нельзя (Похоже что все-таки можно)}
· Элементы, объявленные в разделе interfaceмодуля вне описания типа (класса), видимы и доступны внутри данного модуля и из внешних модулей. В рассмотренном ниже примере это относится к переменной Ch2 и процедуре F3.
· Элементы, объявленные в разделе implementationмодуля, видимы и доступны внутри данного модуля, но не доступны из внешних модулей. В рассмотренном ниже примере это относится к переменной СhЗ и процедуре F4.
· Элементы, объявленные внутри другой процедуры (в рассмотренном примере это переменная Ch4 и процедура F5,описанные внутри процедуры TForml.ButtonlClick),являются локальными, т.е. они видимы и доступны только внутри данной процедуры или внутри процедур, вложенных в данную. При этом время жизни переменных, объявленных внутри процедуры, определяется временем выполнения данной процедуры.