0
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 的父对象因此是根对象吗?

非常感谢

4

3 回答 3

3

发生这种情况是因为

base.GetType()

意思是“调用GetType()父类的方法”,虽然你没有覆盖它。因此base.GetType()this.GetType()总是会返回类B

于 2012-06-07T02:49:56.937 回答
0

GetType定义在System.Object并且不是虚拟的。它从元数据中提供对象的运行时类型。因此,无论您在哪里调用它(在构造函数或虚拟方法中),或者您是否使用basethis始终调用相同的方法,都无关紧要。您将始终获得运行时类型,除非在 Nullable 类型的情况下您将获得基础类型。我的猜测是,这是由于 nullables 的特殊装箱行为。请参阅this on identify nullable types。

于 2012-06-07T03:05:39.353 回答
0

B 从 A 实现/继承,当您初始化 B b = new B() 时,它将只使用 a 的胆量,因此返回 B 的类型。尝试使用 A b = new B(); 这应该返回 A。您需要覆盖方法并将 A 定义为抽象。

于 2012-06-07T02:55:42.750 回答