Видимость членов класса и модификаторы доступа

Видимость членов класса и модификаторы доступа

Каждое поле, метод или свойство класса имеет модификатор (атрибут) доступа, задающий правила его видимости. В PascalABC.NET существуют четыре вида модификаторов доступа: public (открытый), private (закрытый), protected (защищенный) и internal (внутренний). К члену класса, имеющему атрибут public, можно обратиться из любого места программы, члены класса с атрибутом private доступны только внутри методов этого класса, члены класса с атрибутом protected доступны внутри методов этого класса и всех его подклассов, члены класса с атрибутом internal доступны внутри сборки (термин .NET, сборка в нашем понимании - это множество файлов, необходимых для генерации .exe или .dll-файла). Кроме того, private и protected члены видны отовсюду в пределах модуля, в котором определен класс.

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

Например, пусть данный код располагается в одном модуле:

type

A = class

private

x: integer;

protected

a: integer;

public

constructor Create(xx: integer)

begin

x := xx; // верно, т.к. внутри метода класса можно обращаться к его закрытому полю x

a := 0; // верно

end;

;

Следующий же код пусть располагается в другом модуле: type

B = class(A)

public

procedure print;

begin

writeln(a); // верно, т.к. a - защищенное поле

writeln(x); // неверно, т.к. х - закрытое поле

end;

end;

...

var b1: B := new B(5);

...

writeln(b1.x); // неверно, т.к. х - закрытое поле

writeln(b1.a); // неверно, т.к. a - защищенное поле

b1.print; // верно, т.к. print - открытый метод

Комментарии по тексту программы описывают верное и неверное в смысле доступа обращение к полям и методам.