Почему следующий пример не вызвал ошибку компиляции? Хотя обращение к полю недопустимо
type TExample = class private field: integer end;
var E : TExample;
begin E := new TExample; E.field := 100 end.
Почему следующий пример не вызвал ошибку компиляции? Хотя обращение к полю недопустимо
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
из С.
Тут Вы правы, но, как я понял, речь идёт о коде внутри одного файла.