• 第四章 类型基础


    1. 所有类型都继承自System.Object

    object的GetType方法是非虚方法,防止基类重写此方法,破坏类型安全性.

    Var test=new Test(“test”)

    创建对象时所进行的操作:

    1. 计算类型及所有基类型中定义的实例字段字节数,以及”类型对象指针”和”同步块索引”.

    2. 从托管对中分配计算的字节数,所有字节设为零(0).

    3. 初始化”类型对象指针”和”同步块索引”.

    4. 调用实例构造函数,传入参数.

    2. 类型装换

    if(0 is Employee){
       var e=(Employee)o;
    }

    var e=o as
    Employee;
    if(null!=e){
    }
    第一中用法要进行两次的类型检查.第二种只进行一次的类型检查.效率要高一些.

    3. 运行时的相互联系

    类型对象:包含静态字段和方法表,以及类型对象指针,同步块索引.类型对象是System.Type类型的实例.类型对象中的类型对象指针指向System.Type.

    System.Type类型对象本身也有一个类型对象指针,而且他的类型对象指针指向自己.

    System.Object.GetType方法返回的是存储在指定对象的”类型对象指针”成员中的地址.

    在调用静态方法时,CLR会定位与定义静态方法的类型的类型对象,然后再类型对象的方法表中查找对应的记录项.

    在调用非虚实例方法时,JIT编译器会找到与”发出调用的那个变量的那个变量类型”对应的类型对象,然后再其本身及其基类的方法表中查找此方法的记录项.

    在调用虚实例方法时,JIt编译器会生成一些额外的代码,这些代码首先检查发出调用的变量,然后跟随地址找到调用的对象,然后代码检查对象内部的类型对象指针成员,这个成员指向对象的实际类型,然后再找到的类型对象中查找方法的记录项.

  • 相关阅读:
    IDEA 这样设置,好看到爆炸!!!
    别再这么写代码了,这几个方法不香吗?
    HCNA Routing&Switching之静态路由
    HCNA Routing&Switching之路由基础
    HCNA Routing&Switching之vrp文件系统
    HCNA Routing&Switching之vrp远程管理
    HCNA Routing&Switching之vrp基础
    分布式kv存储系统之Etcd集群
    容器编排系统K8s之包管理器Helm基础使用(二)
    容器编排系统K8s之包管理器Helm基础使用(一)
  • 原文地址:https://www.cnblogs.com/zhangliming/p/3447459.html
Copyright © 2020-2023  润新知