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