d获取类名

原文
B的类名:

interface A {
    string text();
}

class B : A {
    override string text() {
        return ": It's ok!";
    }
}

void main() {
    A[] a = cast(A[]) new B[3];
    B b = new B();
    fill(a, b);
    foreach (val ; a) {
        writeln(typeof(val).stringof, val.text());
    }
}

可用val.classinfo.name.
如果转换为Object并使用classinfo.name,则会得到B.

//前面略...
void main() {
    A[] a = cast(A[]) new B[3];
    B b = new B();
    fill(a, b);
    foreach (val ; a) {
        writeln((cast(Object)val).classinfo.name, val.text()); // 技巧在此.
    }
}
posted @ 2022-11-16 14:32  zjh6  阅读(10)  评论(0)    收藏  举报  来源