Почему приватные переменные в классе доступны здесь? - PullRequest
0 голосов
/ 27 мая 2019

Я только начал использовать язык D и пробовал какой-то объектно-ориентированный код.

Я пытаюсь следующий код:

import std.stdio; 

class Testclass{
    private int intvar = 5;
    private string strvar = "testing"; 
}

void main(){
    auto tc = new Testclass(); 

    // check if private variables are accessible:
    writeln(tc.intvar); 
    writeln(tc.strvar); 
}

Запуск вышеуказанного кода имеет следующий вывод:

$ rdmd soq_private.d
5
testing

Я считаю, что переменные intvar и strvar доступны из основного fn.Разве они не должны быть недоступны, если они объявлены частными в своем классе?

Ответы [ 2 ]

2 голосов
/ 27 мая 2019

См. "D Lang" вики:

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

https://wiki.dlang.org/Access_specifiers_and_visibility

Поскольку вы находитесь в том же модуле, что и окружающий класс, это разрешено.

0 голосов
/ 19 июля 2019

Из спецификации D:

Доступ к символам с частной видимостью возможен только из одного и того же модуля.

https://dlang.org/spec/attribute.html#visibility_attributes

Таким образом, частная применяется для всего модуля, а не для всего класса.У D нет атрибута видимости только для агрегатов.

...