某个基本类型对象内部的类型对象指针实际指向何处?

问题描述 投票:0回答:2

[当我阅读“通过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
c# inheritance types clr
2个回答
0
投票

Delegate

Type类的BaseType属性返回该类型继承的类。因此,在System.Delegate的情况下,BaseType将为System.Object类型,因为如果您阅读System.Delegate的文档,则它直接继承自System.Object。 C#中的每个类都继承自System.Object,即使不是直接继承也是如此。

您可以从上面的链接中看到,System.Delegate实现ICloneable,System.Runtime.Serialization.ISerializable。最后两个是接口,因此它们不算作扩展类。因此,它隐式地直接继承了System.Object。


0
投票

某些基本类型对象的类型对象(例如Employee {}类)是System.Type

这是正确的,但有些令人困惑,any对象的类型对象是System.Type。

GetType方法实际上返回一个指向对象类型对象的指针

也是如此。我们称其为引用而不是指针,但这是技术性。

所以听起来System.Type是所有类型对象都引用的最基本的类型对象。

这不遵循前面的陈述。 System.Object是所有其他对象派生的最基础的对象。 System.Type是一个与其他对象一样的对象,因此它是从System.Object派生的。如图所示。

这样的讨论可能会变得有些混乱。区分对象类型(即Employee)和该对象的类型对象(即System.Type)至关重要。

© www.soinside.com 2019 - 2024. All rights reserved.