关于C#的基础

时间:2012-06-07 02:45:43

标签: c# base

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

非常感谢

3 个答案:

答案 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)

GetTypeSystem.Object上定义,不是虚拟的。它从元数据中提供对象的运行时类型。因此,无论您在何处调用它(在构造函数或虚拟方法中),或者使用basethis,您始终都在调用相同的方法。您将始终获得运行时类型,但在Nullable类型的情况下,您将获得基础类型。我的猜测是,这是由于nullables的特殊拳击行为。有关识别可空类型的信息,请参阅this

相关问题