04.类型基础

     所有类型都从System.Object派生
 
    Object类型的公开方法
    Equals、GetHashCode、GetType、ToString
 
    Object类型的受保护方法
    MembervieseClone、Finalize
    
    new操作符所做的事情
    1.它计算类型和它的所有基类中定义所有字段需要的字节数
    2.它从托管堆中分配指定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为零
    3.初始化对象的成员
    4.调用类型的构造函数
    5.返回新建对象的引用
 
    类型转换
    CLR允许将一个对象转换成它的(实际)类型或者它的任何基类型
     向基类型转换是一种安全的隐式转换,然而将其转换成派生类时则需要显式地转换
 
    使用C#的is和as操作符来转型
    is检查一个对象是否兼容于指定的类型,并返回一个bool值,is操作符永远不会抛出异常
    使用as操作符,则CLR检查类型可以减少检查一次,提高系统的性能
    as操作符的工作方式与强制类型转换一样,如果不能转换,则返回一个null
 
    命名空间和程序集不一定是相关的
 
    运行时的相互联系
    类型、对象、线程栈和托管堆
    栈是从高位内存地址到低位内存地址构建的
    调用一个方法时,还会将一个"返回地址"压入栈,被调用的方法结束之后,应该返回这个位置
 
    将数据存放于堆中
    检查内部所有的引用类型,确保对应的程序集被加载,通过程序集中的元数据,CLR会提取这些类型的相关信息,并创建一些结构表示类型本身,并存放于堆中
    
    堆上的所有对象都包含两个额外的成员:类型对象指针和同步块索引
 
  调用一个非虚实例方法时,JIT编译器会查询该类型中的方法表,如果没有找到,则会向上查询,查询该类型的基类是否包含这个方法,一直找到Object类型
    调用一个虚方法时,JIT编译器会生成额外的代码,通过这些代码检查发出调用的变量,代码检查类型对象指针,这个成员指向对象的实际类型,在该类型对象中查找调用的方法
 
 
 
原文地址:https://www.cnblogs.com/a2htray/p/4558236.html