覆盖 D 中的非函数 class 成员

Overriding non-function class members in D

在 DLang 中,有没有一种方法可以覆盖 class 在派生 class 中不是函数的字段?还是 class vtables 只包含函数指针?

例如,我希望下面的代码打印 "bar",但它打印的是 "foo".

class Foo
{
   string s = "foo";
}

class Bar : Foo
{
   string s = "bar";
}

void main()
{
   import std.stdio;

   Foo bar = new Bar;
   writeln(bar.s);
}

只有函数可以是虚函数。 vtable 提供了一种方法来查找函数的正确覆盖,但是变量是直接访问的,没有像使用虚拟 table.

时那样的任何间接访问。

如果您想做一些类似于覆盖成员变量的事情,那么最接近的是 属性 函数。例如

class Foo
{
    @property string s() { return _s; }

    private string _s = "foo";
}

class Bar : Foo
{
    override @property string s() { return _s; }

    private string _s = "bar";
}

void main()
{
    import std.stdio;

    Foo bar = new Bar;
    writeln(bar.s);
}