Like getClass()
Christopher Wright
dhasenan at gmail.com
Sat Sep 27 16:21:56 PDT 2008
Sergey Gromov wrote:
> Sat, 27 Sep 2008 19:50:18 +0200,
> torhu wrote:
>> obj.classinfo doesn't work the way you'd expect with an interface, but
>> it works when you've got an object:
>>
>> writefln((cast(Object)thing).classinfo.name);
>
> Thanks for the tip! It seems like classinfo of an interface contains
> information about the most derived interface implemented in an object:
>
> interface a {}
> interface aa : a {}
> class A : aa {}
> void main() {
> writefln((cast(a) new A).classinfo.name);
> }
>
> prints "test.aa". Though this functionality is of questionable
> usefulness (has anybody used it for something?) and besides it's broken:
>
> interface a {}
> interface aa : a {}
> class A : a, aa {}
> void main() {
> writefln((cast(a) new A).classinfo.name);
> }
>
> prints "test.a" even though A implements the "aa" interface as well.
Since .classinfo is essentially a virtual call, and interface vtbls are
filled from the class's vtbl, it shouldn't in theory be terribly
difficult to change this. Of course, I'd have to check the dmd source to
be sure.
More information about the Digitalmars-d-learn
mailing list