我在一个模块中有两个D类。我希望A类有一个属性,只能从A类和B类访问。我该怎么做?
class A {
int a = 5; // Make this accessible to, and only to, B.
}
class B {
this(in A pA) {
int b = pA.a;
}
}
答案 0 :(得分:7)
private
是模块的私有,而不是类。因此,将符号标记为private
使得只有该模块中的内容才能访问它。
package
使得只有同一个包中的东西才能访问该符号。
protected
使得只有该类和从该类派生的类中的东西才能访问该符号(与其他类不同,protected
在类之外没有任何意义。)
public
使得所有内容都可以访问该符号。
private
和package
函数永远不是虚拟的,而protected
和public
函数总是虚拟的,除非编译器能够确定它们不需要是(此时,只有在函数为final
并且不覆盖基类中的函数时才会发生。)
因此,只要您的两个类位于同一个模块中,并且它们的成员是私有的,它们就可以访问其他成员 - 就像模块中的任何其他成员一样 - 但模块外部的任何内容都无法访问它们。除了符号是函数的本地符号之外,没有办法限制模块内的访问权限,所以如果你想使它成为一个类无法访问另一个类的成员,那么你需要将它们放入单独的模块。
答案 1 :(得分:4)
只需添加private
访问修饰符是基于模块的,protected
是唯一的例外
http://dlang.org/attribute.html#ProtectionAttribute(我的)
私有意味着只有封闭类的成员才能访问成员,或与封闭类相同的模块中的成员和函数。无法覆盖私有成员。私有模块成员等同于C程序中的静态声明。