关于 C# 中的基数

  • 本文关键字:关于 c# radix
  • 更新时间 :
  • 英文 :

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

B

实现/继承自 A,当你初始化 B b = new B() 时,它将只使用 a 的 guts,因此返回 B 的类型。您需要重写方法并将 A 定义为抽象。

GetType是在System.Object上定义的,不是虚拟的。它从元数据提供对象的运行时类型。因此,无论在哪里调用它(在构造函数或虚拟方法中),或者是否使用basethis,您始终调用相同的方法。你将始终获取运行时类型,但对于 Nullable 类型,你将获得基础类型。我的猜测是,这是由于可为空的特殊装箱行为。请参阅有关标识可为 null 类型的内容。

相关内容

  • 没有找到相关文章

最新更新