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"而不是"对象",没有基础。GetType() 获取 A 的父对象,因此根对象?
多谢
发生这种情况是因为
base.GetType()
表示"调用父类的GetType()
方法",尽管您尚未覆盖它。因此,base.GetType()
和this.GetType()
总是会返回类B
实现/继承自 A,当你初始化 B b = new B() 时,它将只使用 a 的 guts,因此返回 B 的类型。您需要重写方法并将 A 定义为抽象。
GetType
是在System.Object
上定义的,不是虚拟的。它从元数据提供对象的运行时类型。因此,无论在哪里调用它(在构造函数或虚拟方法中),或者是否使用base
或this
,您始终调用相同的方法。你将始终获取运行时类型,但对于 Nullable 类型,你将获得基础类型。我的猜测是,这是由于可为空的特殊装箱行为。请参阅有关标识可为 null 类型的内容。