Virtual Classes?

Basile B. via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Aug 17 22:11:49 PDT 2016


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.


More information about the Digitalmars-d-learn mailing list