Видимость членов класса и модификаторы доступа
Каждое поле, метод или свойство класса имеет модификатор (атрибут) доступа,
задающий правила его видимости. В 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;
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 -
открытый метод
Комментарии по тексту программы описывают верное и неверное в смысле доступа обращение к полям и методам.