39 lines
632 B
D
39 lines
632 B
D
class A {
|
|
string foo() {
|
|
return "I am an A.";
|
|
}
|
|
}
|
|
class B {
|
|
string foo() {
|
|
return "I am a B.";
|
|
}
|
|
}
|
|
|
|
class C : A {
|
|
string className = "C";
|
|
override string foo() {
|
|
return "I am a "~className~", and thus an A.";
|
|
}
|
|
@property
|
|
BWrapper asB() {
|
|
return new BWrapper();
|
|
}
|
|
alias asB this;
|
|
class BWrapper : B {
|
|
override string foo() {
|
|
return "I am a "~className~", disguised as a B.";
|
|
}
|
|
}
|
|
}
|
|
|
|
unittest {
|
|
import std.stdio : writeln;
|
|
|
|
auto c = new C();
|
|
A a = c;
|
|
B b = c;
|
|
|
|
writeln(a.foo());
|
|
writeln(b.foo());
|
|
}
|