Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_OOP_Delphi.docx
Скачиваний:
54
Добавлен:
31.05.2015
Размер:
2.39 Mб
Скачать

7. Области видимости

Для определения области видимости в Delphi используются спецификаторы доступа: public, private, protected.

  • Поля, свойства и методы, находящиеся в секции public, не имеют ограничений на видимость. Они доступны из других функций и методов объектов, как в данном модуле, так и во всех прочих, ссылающихся на него.

  • Поля, свойства и методы, находящиеся в секции private, доступны только в методах класса и в функциях, содержащихся в том же модуле, что и описываемый класс. Такая директива позволяет скрыть детали внутренней реализации класс от всех.

  • Поля, свойства и методы, находящиеся в секции protected, доступны для любых объектов внутри данного модуля, а также для объектов классов — наследников данного класса в других модулях. Объекты из других модулей, классы которых не являются наследниками данного класса, защищенных элементов не видят.

Пример:

unit First;

Interface

type

TFirstObj = class;

public

procedure method1;

private

procedure method2;

protected

procedure method3;

end;

procedure proc1;

Implementation

var AFirstObj: TFirstObj;

procedure proc1;

begin

AFirstObj:=TFirstObj.Create;

AFirstObj.method1; {можно}

AFirstObj.method2; {можно}

AFirstObj.method3; {Нельзя (Похоже что все-таки можно)}

AFirstObj.Free;

end;

end.

//--------------------------------------------------------------------

unit Second;

Interface

uses First;

type

TSecondObj = class(TFirstObj)

procedure method4;

end;

procedure proc2;

Implementation

var ASecondObj: TSecondObj;

procedure TSecondObj.method4;

begin

method1; {можно}

method2; {Нельзя}

method3; {можно}

end;

procedure proc2;

begin

ASecondObj:= TSecondObj.Create;

ASecondObj.method1; {можно}

ASecondObj.method2; {Нельзя}

ASecondObj.method3; {Нельзя}

ASecondObj.Free;

end;

end.

  • Элементы, объявленные в разделе interface модуля вне описания типа (класса), видимы и доступны внутри данного модуля и из внешних модулей. В рассмотренном ниже примере это относится к переменной Ch2 и процедуре F3.

  • Элементы, объявленные в разделе implementation модуля, видимы и доступны внутри данного модуля, но не доступны из внешних модулей. В рассмотренном ниже примере это относится к переменной СhЗ и процедуре F4.

  • Элементы, объявленные внутри другой процедуры (в рассмотренном примере это переменная Ch4 и процедура F5, описанные внутри процедуры TForml.ButtonlClick), являются локальными, т.е. они видимы и доступны только внутри данной процедуры или внутри процедур, вложенных в данную. При этом время жизни переменных, объявленных внутри процедуры, определяется временем выполнения данной процедуры.

Пример:

unit Unitl;

Interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForml = class(TForm)

Labell: TLabel;

Buttonl: TButton;

procedure ButtonlClick(Sender: TObject);

private

{Процедура Fl доступна только в данном модуле)

procedure Fl (Ch:char) ;

public

{Переменная Chi и процедура F2 доступны для объектов

любых классов и для других модулей, но со ссылкой

на объект}

Chi:char;

procedure F2(Ch:char);

end;

var

Forml: TForml;

{Переменная Ch2 и процедура F3 доступны для объектов

любых классов и для других модулей}

Ch2:char;

procedure F3(Ch:char);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]