我刚刚开始使用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变量。如果在班级中将其声明为私有,是否应该无法访问它们?
答案 0 :(得分:1)
请参阅“ D Lang” Wiki:
“私有意味着只有封闭类的成员才能访问该成员,或者与封闭类在同一模块中的成员和功能。私有成员不能被覆盖。”
https://wiki.dlang.org/Access_specifiers_and_visibility
由于您与封闭类位于同一模块中,因此允许这样做。
答案 1 :(得分:0)
根据D规范:
- 具有私有可见性的符号只能从同一模块内访问。
https://dlang.org/spec/attribute.html#visibility_attributes
因此,private适用于模块级而不是类级。 D没有仅聚合的可见性属性。