我在阅读"CLR通过C#“一书(”类型基本原理“一章)时感到困惑,书中说某些基类型对象(例如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编辑
感谢JonasH提供了答案。我还绘制了一个帮助我从视觉上理解它的方案:

发布于 2020-03-04 13:04:06
某些基类型对象(例如,类Employee { })的类型对象是System.Type
any对象的类型对象是System.Type,这是对的,但有点令人困惑。
GetType方法实际上返回指向对象类型对象的指针
也是真的。我们称它为引用而不是指针,但这是一个技术性问题。
因此,听起来System.Type是所有类型对象所引用的最基本的类型对象。
这与前面的语句不同。System.Object是所有其他对象派生的最基本的对象。System.Type和其他对象一样是一个对象,因此它是从System.Object派生的。就像你的插图一样。
像这样的讨论可能会变得有点混乱。区分对象类型(即Employee )和所述对象的类型对象(即System.Type )至关重要。
从语言设计的角度来考虑。有一个所有对象派生的基类型是很有用的,这样程序员就可以在需要时避开类型系统,并且有一些基本的方法,比如ToString和GetHashcode。让程序员检查并直接使用语言的类型系统也是很有用的。我们称之为“反射”。System.Type是该系统的一部分,它描述了对象的类型信息。但是它和任何其他类型一样,所以它需要从System.Object派生。
发布于 2020-03-04 13:14:44
Type类的属性BaseType返回类型继承的类。因此,在System.Delegate的例子中,BaseType将是System.Object类型,因为如果您阅读了System.Delegate的文档,它将直接从System.Object继承。C#中的每个类都是从System.Object继承的,即使不是直接的。
从上面的链接可以看出,System.Delegate实现了ICloneable,System.Runtime.Serialization.ISerializable。最后两个是接口,所以它们不算作扩展类。因此,隐式地,它直接继承System.Object。
https://stackoverflow.com/questions/60526561
复制相似问题