为什么可以在这里访问类中的私有变量?

时间:2019-05-27 02:49:03

标签: oop d

我刚刚开始使用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

我发现可以从主fn访问intvar和strvar变量。如果在班级中将其声明为私有,是否应该无法访问它们?

2 个答案:

答案 0 :(得分:1)

请参阅“ D Lang” Wiki:

  

“私有意味着只有封闭类的成员才能访问该成员,或者与封闭类在同一模块中的成员和功能。私有成员不能被覆盖。”

https://wiki.dlang.org/Access_specifiers_and_visibility

由于您与封闭类位于同一模块中,因此允许这样做。

答案 1 :(得分:0)

根据D规范:

  
      
  1. 具有私有可见性的符号只能从同一模块内访问。
  2.   

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

因此,private适用于模块级而不是类级。 D没有仅聚合的可见性属性。