Subclass Type
Mason Green
mason.green at gmail.com
Fri Aug 15 05:40:24 PDT 2008
Hi, does anyone know how to return a Subclass's type? I would like to create a new instance of the subclass based on its type. Here is my example code....
class FooBar {
class Foo : FooBar {
this() {
super(1);
}
override void printKey() {
Stdout(key).newline;
}
}
class Bar : FooBar {
this() {
super(2);
}
override void printKey() {
Stdout(key).newline;
}
}
void main() {
FooBar x = new Foo();
FooBar y = new typeof(x);
x.key++;
y.printKey(); // This prints 0. I want it to print 1
}
As is, y is created as type FooBar. Instead I would like to be of type Foo. i.e the equivalent of:
FooBar y = new Foo();
I've seen this done in other languages such as ActionScript fairly easily:
public function createJoint(data:JointData):Joint
{
var c:Class = data.getJointClass();
var j:Joint = new c(data) as Joint;
}
In this case, Joint is the superclass. data.getJointClass returns the subclass type. j is created as a new subclass. The normal D equivalent would be:
Joint j = new MouseJoint(); // or some other subclass that getJointClass
// returns.
Thanks,
Mason
More information about the Digitalmars-d-learn
mailing list