reimplementing an interface in a derived class
sascha.orlov at gmail.com
Fri Jan 4 22:41:08 UTC 2019
On Friday, 4 January 2019 at 21:08:24 UTC, Ali Çehreli wrote:
> In this case, casting is using the B object through it's A
> interface. The overridden behavior does not change.
Yeah... This was my mistake.
> (Actually, that is possible in languages that support multiple
> inheritance through multiple virtual function pointer tables
> (vtbl) but D does not support that.)
> Although I'm getting into implementation details here, I think
> it helps with understanding the semantics. There is only one
> vtbl per class object in D and the function entries are all
> filled in during construction. So, a B object's 'foo' slot in
> that table is filled with B.foo. So, such an object can foo()
> only as a B.
> By the way, do you have a use case in mind? Perhaps there are
> other ways to achieve that.
Well, not really. I was just astonished that casting is not _the_
forge tool. Then, I checked, that the type indeed changes and
wondered why the behavior was still from the object before
But I assume, as in an A-type an A object, as well as a B object,
can be stored, and the creation is under my own control - a use
case would be some corner case... And the default virtual
definition explains the behavior very well...
More information about the Digitalmars-d-learn