设为首页 加入收藏

TOP

基础类型(二)
2019-09-17 18:23:35 】 浏览:39
Tags:基础 类型
er对象。调用静态方法的时候,CLR会首先定位到静态方法的类型对应的类型对象,然后,JIT编译器在类型对象方法表中查找与被调用方法的对应的记录项,对方法进行JIT编译,然后在调用编译好的代码。

    M3接下来调用非虚实例方法,GetYearsEmployed。调用虚方法时,JIT编译器会找到发出调用的那个变量(e)的类型(Employee)对应的类型对象。如果找不到,就回溯到 object 类,之所以能回溯,是因为每一个对象都有一个字段引用了它的基类类型。从方法记录表中找到被调用方法的记录项后,进行JIT编译,编译完成后,在进行方法的调用。

    接下来调用的是Empoloyee的虚实例方法GetProgressReport。调用时,JIT要先在方法中生成一些额外的代码,每次都会执行这些代码。这些代码,首先检查发出调用的变量,然后跟随地址来到发出调用的对象,变量e引用的是 manager 对象,然后代码检查对象的内部的“类型对象指针”成员,改成员指向了实际的类型。然后在对类型的对象方法表中查找被调用的方法的记录向,对方法进行JIT编译,并且执行。

     Employee和Manager类型对象都会包含一个“类型对象指针”成员,由于类型对象本身也是对象,CLR在创建类型对象时,必须初始化这些成员。CLR开始在进程中运行时,会立即为MSCorLib.dll中定义的System.Type类型对象创建一个特殊的类型对象。Employee和Manager类型对象都是改类型的“实例”,因此,他们的类型对象指针成员都会初始化成对System.Type类型对象的引用。当然,System.Type类型对象本身也是对象,内部也有“类型对象指针”成员,这个指针就指向了他本身,因为这个System.Type类型对象本身是一个类型对象的“实例”。而System.Object的GetType方法返回存储在指定对象的“类型对象指针”成员中的地址,也就是说,GetType方法返回执行对象的类型对象指针,这样就可以判断任何对象的真实类型。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C# Winform模仿百度日历 下一篇听说,霸都.NET技术社区准备搞线..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目