如何将方法设置为私有模块?

时间:2014-04-06 19:48:57

标签: d private-members

我在一个模块中有两个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;
    }
}

2 个答案:

答案 0 :(得分:7)

private是模块的私有,而不是类。因此,将符号标记为private使得只有该模块中的内容才能访问它。

package使得只有同一个包中的东西才能访问该符号。

protected使得只有该类和从该类派生的类中的东西才能访问该符号(与其他类不同,protected在类之外没有任何意义。)

public使得所有内容都可以访问该符号。

privatepackage函数永远不是虚拟的,而protectedpublic函数总是虚拟的,除非编译器能够确定它们不需要是(此时,只有在函数为final并且不覆盖基类中的函数时才会发生。)

因此,只要您的两个类位于同一个模块中,并且它们的成员是私有的,它们就可以访问其他成员 - 就​​像模块中的任何其他成员一样 - 但模块外部的任何内容都无法访问它们。除了符号是函数的本地符号之外,没有办法限制模块内的访问权限,所以如果你想使它成为一个类无法访问另一个类的成员,那么你需要将它们放入单独的模块。

答案 1 :(得分:4)

只需添加private

访问修饰符是基于模块的,protected是唯一的例外

http://dlang.org/attribute.html#ProtectionAttribute(我的)

  

私有意味着只有封闭类的成员才能访问成员,或与封闭类相同的模块中的成员和函数。无法覆盖私有成员。私有模块成员等同于C程序中的静态声明。