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


#1

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

type TExample = class private field: integer end;

var E : TExample;

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


#2

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


#3

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

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

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

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


#4

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


#5

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

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

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


#6

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


#7

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


#8

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


#9

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


#10

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