[当我阅读“通过C#进行CLR”(类型基础一章)时感到困惑,该书说某个基本类型对象(例如class Employee { }
)的类型对象是System.Type,而且GetType方法实际上返回了一个指针。到对象的类型对象(它提供类型继承),因此听起来像System.Type是所有类型对象都引用(并且System.Type类型指针引用自己)的最基本的类型对象。但是,另一方面,所有类型都继承自System.Object,例如,实际上,此表达式typeof(Employee).BaseType
返回System.Object(而不是System.Type!)。那么,谁能解释类型对象指针实际上指的是什么呢? System.Type或System.Object?
System.Object
/ \
Employee System.Reflection.MemberInfo
\
System.Type
Type类的BaseType属性返回该类型继承的类。因此,在System.Delegate的情况下,BaseType将为System.Object类型,因为如果您阅读System.Delegate的文档,则它直接继承自System.Object。 C#中的每个类都继承自System.Object,即使不是直接继承也是如此。
您可以从上面的链接中看到,System.Delegate实现ICloneable,System.Runtime.Serialization.ISerializable。最后两个是接口,因此它们不算作扩展类。因此,它隐式地直接继承了System.Object。
某些基本类型对象的类型对象(例如Employee {}类)是System.Type
这是正确的,但有些令人困惑,any对象的类型对象是System.Type。
GetType方法实际上返回一个指向对象类型对象的指针
也是如此。我们称其为引用而不是指针,但这是技术性。
所以听起来System.Type是所有类型对象都引用的最基本的类型对象。
这不遵循前面的陈述。 System.Object是所有其他对象派生的最基础的对象。 System.Type是一个与其他对象一样的对象,因此它是从System.Object派生的。如图所示。
这样的讨论可能会变得有些混乱。区分对象类型(即Employee
)和该对象的类型对象(即System.Type
)至关重要。