namespace contest
{
class Program
{
static void Main(string[] args)
{
B b = new B();
}
}
class A {
public A() {
k();
}
private void k() {
Console.WriteLine(base.GetType().Name);
}
}
class B : A {
}
}
有人可以告诉我为什么它输出“B”而不是“Object”,不是base.GetType()得到A的父对象因此是根对象吗?
非常感谢
答案 0 :(得分:3)
这是因为
base.GetType()
表示“调用父类的GetType()
方法”,但您没有覆盖它。因此,base.GetType()
以及this.GetType()
将始终返回班级B
答案 1 :(得分:0)
B实现/继承自A,当你初始化B b = new B()时,它只会使用a的guts,因此返回B的类型。尝试使用A b = new B();这应该返回A.您需要覆盖方法并将A定义为抽象。
答案 2 :(得分:0)
GetType
在System.Object
上定义,不是虚拟的。它从元数据中提供对象的运行时类型。因此,无论您在何处调用它(在构造函数或虚拟方法中),或者使用base
或this
,您始终都在调用相同的方法。您将始终获得运行时类型,但在Nullable类型的情况下,您将获得基础类型。我的猜测是,这是由于nullables的特殊拳击行为。有关识别可空类型的信息,请参阅this。