首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CLR型系统

CLR型系统
EN

Stack Overflow用户
提问于 2020-03-04 12:52:32
回答 2查看 406关注 0票数 1

我在阅读"CLR通过C#“一书(”类型基本原理“一章)时感到困惑,书中说某些基类型对象(例如class Employee { })的类型对象是 System.Type ,而且GetType方法实际上返回指向对象类型对象的指针(该对象提供类型继承),因此听起来System.Type是所有类型对象引用的最基本类型对象(System.Type类型指针引用自身)。但是另一方面,所有类型都是从 System.Object 继承的,并且在实践中,例如,该表达式typeof(Employee).BaseType返回System.Object(而不是System.Type!)。那么,有人能解释类型对象指针实际引用的位置吗?System.Type还是System.Object?

代码语言:javascript
复制
          System.Object
           /         \ 
      Employee     System.Reflection.MemberInfo
                               \
                           System.Type

编辑

感谢JonasH提供了答案。我还绘制了一个帮助我从视觉上理解它的方案:

EN

回答 2

Stack Overflow用户

发布于 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派生。

票数 1
EN

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60526561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档