Fork me on GitHub
.NET框架中对象的本质

每个程序员对面向对象都有自己不同的理解,但是无论如何大家对:类、对象、继承、封装和多态的理解是基本一致的,它们也是面向对象的基础。对象作为程序构建的基础元素,它的存在机制对程序的构建是至关重要的。那么什么是对象?简单说,对象是现实事物在程序中的抽象。

CLR规定,对象的创建都使用new操作符:

Manager  _manager = new Manager();

这样一个看似简单的语句,内部经历了一个复杂的过程:

(1)      确定对象的类型及其所有的基类型,假设类Manager继承自类Employee,类Employee又继承自Person类,那么如上的对象一旦创建,首先找其父类Employee,并为其在托管堆上分配存储空间,而Employee继续向上找父类,分配类型存储空间,依次类推,到最后找到Object类,分配其类型的存储空间。

(2)      类型对象的创建,都会额外创建“类型对象指针”和“同步块索引”,并且在类型内部定义静态数据字段。在每个类型对象最后都会包含一个方法表。     CLR开始在一个进程中运行是,它会立即为System.Type类型创建一个特殊的类型对象,一般的类型对象的“类型对象指针“成员会初始化为对System.Type类型对象的应用。

(3)      根据托管堆中分配指定类型的字节数,分配对象的存储空间,初始化所有的字段。

(4)      初始化对象的“类型对象指针”和“同步块索引”成员,并将对象的所有实例字段初始化为null0

(5)      调用类型的实例构造器,这里有可能更改对象字段的值。

(6)      返回对新对象的引用。对于实例代码,这个引用保存在_manager中。

如下的图例揭示了对象的创建过程和存储的形式。

 

posted on 2010-06-30 11:51  HackerVirus  阅读(169)  评论(0编辑  收藏  举报