cas and interfaces

Rene Zwanenburg renezwanenburg at gmail.com
Thu Dec 27 12:07:48 UTC 2018


On Tuesday, 25 December 2018 at 22:07:07 UTC, Johannes Loher 
wrote:
> Thanks a lot for the info, that clarifies things a bit. But it 
> still leaves the question, why it works correctly when 
> inheriting from an abstract class instead of implementing an 
> interface... Any idea about why that?

Unlike interfaces, base class references don't need adjustment. 
You can see this in action by printing addresses:

https://run.dlang.io/is/m6icVr

import std.stdio;

interface I {}
class Base : I {}
class Derived : Base { }

void main()
{
     auto derived = new Derived;
     Base base = derived;
     I i = derived;

     writeln(cast(void*)derived);
     writeln(cast(void*)base);
     writeln(cast(void*)i);
}

> 7FC1F96EE000
> 7FC1F96EE000
> 7FC1F96EE010


More information about the Digitalmars-d-learn mailing list