Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 我可以在继承类上获取父类名称(第一个)吗?_Oop_Inheritance_Haxe - Fatal编程技术网

Oop 我可以在继承类上获取父类名称(第一个)吗?

Oop 我可以在继承类上获取父类名称(第一个)吗?,oop,inheritance,haxe,Oop,Inheritance,Haxe,在这个示例中,我有三个类:View、FView(扩展视图)和MVView(扩展视图)。我有来自MView类型的变量,并希望对照父类视图检查它(即,如果此变量来自类视图)。是否可以获取父类(视图类)。以下是完整的示例: 类视图: class View { public function new() { } } 第五类视图: class FView extends View { public function new() { super();

在这个示例中,我有三个类:View、FView(扩展视图)和MVView(扩展视图)。我有来自MView类型的变量,并希望对照父类视图检查它(即,如果此变量来自类视图)。是否可以获取父类(视图类)。以下是完整的示例:

类视图:

class View {
    public function new() {

    }
}
第五类视图:

class FView  extends View { 
    public function new() {
        super();
    }
}
类视图:

class SView  extends FView {
    public function new() {
        super();
    }
}

如果要访问基类,可以简单地递归或迭代,直到
Type.getSuperClass()
返回
null

// at runtime: find out what is the base class of `v`
var base:Class<Dynamic> = Type.getClass(v);
while (true) {
    var s = Type.getSuperClass(base);
    if (s == null)
        break;
    base = s;
}
trace(Type.getClassName(base));
如果您需要在运行时执行此操作,也可以使用
Std.is()


要获得完整的示例,请查看Try Haxe instance。

您提到了
MView
,但您当前的示例没有包括它。相反,它包含继承
FView
SView
,因此上面列出的类层次结构与您描述的不同。什么是正确的类层次结构?目前,上面的代码示例似乎工作正常。
// at runtime: find out what is the base class of `v`
var base:Class<Dynamic> = Type.getClass(v);
while (true) {
    var s = Type.getSuperClass(base);
    if (s == null)
        break;
    base = s;
}
trace(Type.getClassName(base));
// at compile time: enforce that `v` be of type `View` or compatible with it
var v1 = (v:View);  // use a type check
var v2:View = v;    // or simply pass it to something expecting `View`
// at runtime: check if `v` is a subclass instance of `View`
trace(Std.is(v, View));