On Thursday, 18 August 2016 at 03:58:00 UTC, Meta wrote:
On Thursday, 18 August 2016 at 02:55:49 UTC, Basile B. wrote:
On Thursday, 18 August 2016 at 02:51:48 UTC, Meta wrote:
On Thursday, 18 August 2016 at 00:49:49 UTC, Engine Machine wrote:
https://en.wikipedia.org/wiki/Virtual_class

Can D do stuff like this naturally?

Yes, D's `alias this` feature supports this.

https://dlang.org/spec/class.html#alias-this

No read carefully, alias this does not the same thing, particularly when the time comes to override the inner type.

How doesn't it? You define a member with the same name in the outer class and it'll override the inner one.

You can't call the most derived from a variable that has a lesser derived type:

°°°°°°°°°°°°°°°°°°°°°°°°
class Foo
{
    Internal internal;

    class Internal {void stuff() {"base".writeln;}}

    this() {internal = new Internal;}

    alias internal this;
}

class Bar: Foo
{
    void stuff() {"derived".writeln;}
}

void main(string[] args)
{
    Foo f = new Bar;
    f.stuff(); // "base", not "derived".
}
°°°°°°°°°°°°°°°°°°°°°°°°°

From what i've read, "virtual classes" respect the OOP principles.

Reply via email to