zoukankan      html  css  js  c++  java
  • CLR读书笔记第四章 类型基础

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

    1. 如题,那么所有类型具有以下公共方法:Equals,GetHashCode,ToString,GetType;其派生类型可以访问受保护的方法: MemberwiseClone;

    2. CLR要求所有对象都用 new 操作符来创建;

    new操作符的作用:

      @1 计算类型及其所有基类型(知道system.object)中定义的所有实例字段需要的字节数,+"类型对象指针"+"同步块索引"的字节数;

      @2 从托管堆中分配指定类型要求的字节数;

      @3初始化对象的"类型对象指针"和"同步块索引";

      @4调用类型的实例化构造器,传入参数;

    new执行了所有这些操作后,会返回一个指向新建对象的一个引用.

    4.2 类型转换

    1.CLR允许将一个派生类型隐式转换为一个基类型,将基类型转换为派生类型要显示转换; CLR会检查转型操作,确定总是转换为对象的实际类型或者其基类型;

       class Employee{...}...

       Object o=new Employee();  //隐式转化

       Employee e=(Employee) o;  //显示转换

     2. 类型转换  ---is 和 as的区别:

          @1 is检查一个对象是否兼容于指定的类型,并返回一个bool值,is不会抛异常;

        Object o=new Object();

        Boolean o1=(o is Obect);  //true

        Boolean o2=(o is Employee);  //false

        如果对象是null,is返回值为false,因为没有可检查的对象

         if(o is Employee)

       {  Employee e=(Employee) o ;....}

       以上方式会造成两次CLR检查: A CLR首先判断o引用的实际类型; B CLR遍历继承层次结构,用每个基类型去核对指定的类型(Employee);--- 性能低

      @2 as

      Employee e=o as Employee;

      if(e!=null){...}

      如果o兼容于Employee,返回一个非null的引用,否则返回null,as只会是CLR校验一次类型;

    4.3 命名空间和程序集

    1. 命名空间用于对相关的类型进行逻辑性分组,开发人员用于定位一个类型;

        using指令是可选的,using指示编译器尝试为一个类型附件不同的前缀直到找到一个匹配项;

    2. 为命名空间创建别名: using wintellectwidget=win;

      在C#中,namespace指令的作用: 告诉编译器为源代码中出现的每个类型名称附加命名空间前缀,减少打字量;

    3. 命名空间和程序集可能不想关;

    4.4 运行时的相互联系

    1.这一节讲解了  CLR的整个类型系统及其工作方式...看的不是很懂...不知道怎么写笔记了...

    2.堆上的所有对象都包含两个成员: 类型对象指针(Type Obect pointer) 同步索引块(syns block index);

    3. 每个类型对象都最后都包含一个方法表.类型中定义的每个方法都有一个对应的记录项在这个表中;

  • 相关阅读:
    jQuery:自学笔记(1)——基础入门
    Android开发——Accessibility机制实现模拟点击(微信自动抢红包实现)
    Android开发——常用ADB命令的使用
    虚拟现实开发一些建议
    Android开发——Activity生命周期
    JVM——内存管理和垃圾回收
    2016年工作中遇到的问题41-50:Dubbo注册中心奇葩问题,wifi热点坑了
    2016年工作中遇到的问题41-50:Dubbo注册中心奇葩问题,wifi热点坑了
    Spring核心技术(十)——JSR-330标准注解
    Spring核心技术(九)——Spring管理的组件和Classpath扫描
  • 原文地址:https://www.cnblogs.com/ry123/p/2791743.html
Copyright © 2011-2022 走看看