Maybe I'm doing something else incorrectly: class Base { public void inBase() { } }
class Bob : Base { public void inBob() { } } Bob bob = new Bob(); writeln("Bob as Bob"); foreach (i, m; __traits(allMembers, typeof(bob))) { writeln("=== i=", i, " m=", m); } Base base = bob; writeln("Bob as Base"); foreach (i, m; __traits(allMembers, typeof(base))) { writeln("=== i=", i, " m=", m); } The output is: Bob as Bob === i=0 m=inBob === i=1 m=inBase === i=2 m=toString === i=3 m=toHash === i=4 m=opCmp === i=5 m=opEquals === i=6 m=Monitor === i=7 m=factory Bob as Base === i=0 m=inBase ; missing inBob() === i=1 m=toString === i=2 m=toHash === i=3 m=opCmp === i=4 m=opEquals === i=5 m=Monitor === i=6 m=factory If typeof(base) returned Bob as the type, then the two lists of members should be identical. Or am I missing something else? If I use derivedMembers instead of allMembers, the output is: Bob as Bob === i=0 m=inBob Bob as Base === i=0 m=inBase which still seems to support that typeof() doesn't return the underlying type. John On Thu, Oct 20, 2011 at 12:25 AM, Jens Mueller <jens.k.muel...@gmx.de>wrote: > J Arrizza wrote: > > typeof returns the type of the object given to it: > > > > SomeClass sc; > > typeof(sc) // returns SomeClass > > > > Object o = sc; > > typeof(o) // returns Object > > > > Is there a way or call to get the underlying type?: > > > > typeof2(o) //returns SomeClass > > > > I checked the online doc, but nothing in the Declarations section that I > > could see. > > typeid should work. > http://d-programming-language.org/expression.html#TypeidExpression > > Jens > -- John blog: http://arrizza.blogspot.com/ web: http://www.arrizza.com/