Модификатор private. Не работает?

Почему следующий пример не вызвал ошибку компиляции? Хотя обращение к полю недопустимо

type TExample = class private field: integer end;

var E : TExample;

begin E := new TExample; E.field := 100 end.

Прочитайте про то как работают модификаторы видимости в справке. Ну то есть private в поиске наберите.

Благодарю за ответ. Но:

…члены класса с атрибутом private доступны только внутри методов этого класса

т.е. в моем примере E.field := 100 должно дать ошибку, т.к. из основной программы это поле не должно быть доступно…

Или я что-то не так понимаю?

В модуле всё открыто. Это как в Delphi. В другом модуле видно не будет.

Прочитайте всё же всё внимательно) Последнее предложение первого абзаца:

Кроме того, private и protected члены видны отовсюду в пределах модуля, в котором определен класс.

Ну правда не модуля а файла…

В PascalABC.NET модификатор доступа Private аналогичен Сишному Internal. То есть доступ к члену возможен из любого кода внутри одной сборки.

Давайте вы разберётесь перед тем как говорить глупости. В паскале есть и private и internal, и работают они как в C.

Где Вы увидели у меня ошибку? Private и Internal есть в паскале, но работают они несколько иначе, чем в C#. Прочитайте вот это. Если в C# попытаться выполнить вышеприведённый код, то будет ошибка; в паскале, как давно всем известно, ошибки не будет. Если в C#-коде этого примера заменить private на internal, то ошибки не будет. Паскаль изначально имел иную структуру, чем C/C++/C#, следовательно, модификаторы доступа вполне могут иметь несколько иной смысл(хоть и очень близкий).

Между файлами private паскаля не аналогичен internal из С.

1 лайк

Тут Вы правы, но, как я понял, речь идёт о коде внутри одного файла.