gpt4 book ai didi

class - D 类的公共(public)、私有(private)和 protected 访问限定符

转载 作者:行者123 更新时间:2023-12-04 17:19:57 25 4
gpt4 key购买 nike

我是一名从 D 开始的 C++ 程序员,我在理解 D 类的访问限定符时遇到了一些麻烦。考虑以下示例:

import std.stdio;

class Foo {

private void aPrivateMethod()
{
writeln("called aPrivateMethod");
}

protected void aProtectedMethod()
{
writeln("called aProtectedMethod");
}

public void aPublicMethod()
{
this.aPrivateMethod();
this.aProtectedMethod();
}
}

void main(string[] args)
{
Foo foo = new Foo();

foo.aPublicMethod(); // OK to call it from anywhere
foo.aPrivateMethod(); // Must not be allowed to call it outside Foo
foo.aProtectedMethod(); // Should only be callable from within Foo and derived classes
}

我希望前面的代码编译失败,因为它正在调用类 Foo 的私有(private)和 protected 方法在外部函数中。但是,情况并非如此,因为上面的示例在 DMD v2.063.2 上编译和运行时没有错误或警告。很明显,这些关键字的含义与 C++ 的含义不同。

我的问题是:

1)如何使方法和/或变量对类私有(private),以便只有相关类可以访问它。

2)如何使方法和/或变量 protected ,以便只有相关类及其派生类可以访问它。

最佳答案

访问修饰符是模块/文件级别(只有异常 protected )

要删除对类的访问权,请将其放在自己的 mudule 中:

食物

import std.stdio;
class Foo {

private void aPrivateMethod()
{
writeln("called aPrivateMethod");
}

protected void aProtectedMethod()
{
writeln("called aProtectedMethod");
}

public void aPublicMethod()
{
this.aPrivateMethod();
this.aProtectedMethod();
}
}

主文件
import foo;

void main(string[] args)
{
Foo foo = new Foo();

foo.aPublicMethod(); // OK to call it from anywhere
foo.aPrivateMethod(); // compile error: Must not be allowed to call it outside foo.d
foo.aProtectedMethod(); // compile error: Should only be callable from within foo.d, Foo and derived classes
}

关于class - D 类的公共(public)、私有(private)和 protected 访问限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24091375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com