在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结构体的公共方法

dlang语言最新dmd2103版本编译器如下代码import stdstdio;struct People string name = not init; int age = 0; private void test writelnthisnamethisage; void main People p = Peoplechenfa10;

原文地址: https://www.cveoy.top/t/topic/famN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录