dlang语言最新dmd2103版本编译器如下代码import stdstdio;struct People string name = not init; int age = 0; private void test writelnthisnamethisage; void main People p = Peoplechenfa10;
在D语言中,结构体的私有方法可以在结构体内部被访问,包括创建该结构体的代码,因此在第14行,结构体p能够调用私有方法test()。
下面是D语言结构体实现private,public,protected效果的完整例子:
import std.stdio;
struct Base
{
private void privateMethod()
{
writeln("Base privateMethod()");
}
protected void protectedMethod()
{
writeln("Base protectedMethod()");
}
void publicMethod()
{
writeln("Base publicMethod()");
}
}
struct Derived : Base
{
void callProtectedMethod()
{
protectedMethod();
}
void callPublicMethod()
{
publicMethod();
}
// Error: 'privateMethod' is not visible from this function
// void callPrivateMethod()
// {
// privateMethod();
// }
}
void main()
{
Base b = Base();
Derived d = Derived();
// Error: 'privateMethod' is not visible from this function
// b.privateMethod();
// Error: 'protectedMethod' is not visible from this function
// b.protectedMethod();
b.publicMethod(); // Output: Base publicMethod()
d.protectedMethod(); // Error: 'protectedMethod' is not visible from this function
d.publicMethod(); // Output: Base publicMethod()
d.callProtectedMethod(); // Output: Base protectedMethod()
d.callPublicMethod(); // Output: Base publicMethod()
// Error: 'privateMethod' is not visible from this function
// d.callPrivateMethod();
}
在这个例子中,Base结构体中的privateMethod()方法被标记为私有,只能在Base结构体内部访问。protectedMethod()方法被标记为受保护,只能在Base结构体及其派生类中访问。publicMethod()方法被标记为公共,可以在任何地方访问。
Derived结构体继承自Base结构体,在其中可以访问Base结构体中标记为受保护和公共的方法。但是,由于私有方法只能在Base结构体内部访问,因此Derived结构体无法访问Base结构体中的私有方法。
在Derived结构体中,可以通过调用继承自Base结构体的受保护方法来访问Base结构体中的受保护方法。而对于公共方法,则可以直接调用继承自Base结构体的公共方法
原文地址: https://www.cveoy.top/t/topic/famN 著作权归作者所有。请勿转载和采集!