首页 > Windows开发 > 详细

CLR via C#学习笔记-第四章-类型基础-所有类型都从System.Object派生

时间:2018-10-04 07:29:26      阅读:105      评论:0      收藏:0      [点我收藏+]

4.1 所有类型都从System.Object派生

System.Object类型

运行时要求每个类型最终都从System.Object类型派生

也就是说,以下两个类型定义完全一样

//隐式派生自System.Object
class Employee{}
//显式派生自Object class Employee:System.Object{}

由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法。

具体的说,System.Object类提供了如下所示的公共实例方法

Equals//如果两个对象有相同的值,返回true?
GetHashCode//返回对象值的哈希码
ToString//返回类型的完整名称
GetType//返回从Type派生的一个类型的实例,指出调用该方法的对象是什么类型

new操作符

CLR要求所有对象都用new操作符创建

Employee e=new Employee("ConstructorParam1");

以下是new操作符所做的事情

  1. 计算类型及其所有基类型(一直到System.Object)中定义的所有势力字段需要的字节数。堆上每个对象都需要一些额外的成员(overhead成员,开销成员),包括类型对象指针(type object pointer)和同步块索引(sync block index)。CLR利用这些成员管理对象,额外成员的字节数要计入对象大小。
  2. 从托管堆中分配类型要求的字节数,从而分配对象的内存,分配的所有字节都设为0。
  3. 初始化对象的类型对象指针和同步块索引成员。
  4. 调用类型的实例构造器,传递在new调用中指定的实参。大多数编译器都在构造器中自动生成代码来调用基类构造器。每个类型的构造器都负责初始化该类型定义的实例字段,最终调用System.Object的构造器,该构造器什么都不做,简单地返回。

new执行了所有这些操作后,返回指向新建对象一个引用或指针。在前面的示例代码中,该引用保存到变量e中,后者具有Employee类型,

没有和new操作符对应的delete操作符,换言之,没有办法显式释放为对象分配的内存。CLR采用了垃圾自动回收。

CLR via C#学习笔记-第四章-类型基础-所有类型都从System.Object派生

原文:https://www.cnblogs.com/errornull/p/9741276.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!