zoukankan      html  css  js  c++  java
  • 第二部分 设计类型:第4章 类型基础

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

    所有类型派生自System.Object,有一下公共实例方法:
    1.Equals:两个对象具有相同值返回true
    2.GetHashCode:返回对象值的哈希码。
    3.ToString:默认返回类型完整名称(this.GetType().FullName)
       核心类型Boolean和Int32重写了该方法。为方便调试可以重写返回对象各个字段的值字符串。
    4.GetType:返回Type派生的一个对象的实例,指出调用GetType那个对象的类型。

    System.Object的GetType方法返回的是“类型对象指针”地址,可以判断出真实的类型。

    从System.Object派生的类型可访问如下受保护方法:
    1.MemberwiseClone:返回新实例(与this对象实例字段一样)的引用。
    2.Finalize:内存回收前会调用此虚方法。回收之前需要执行清理工作的类型应该重写。

    Employee e = new Employee("Param1");
    CLR要求创建对象必须用new操作符,new操作符做的事情
    1.计算类型和基类型所有实例字段需要的字节数。(包含“类型对象指针”和“同步块索引”)
    2.它从托管堆中分配需要的字节数,分配对象内存,分配的字节都设为0。
    3.初始化对象“类型对象指针”和“同步块索引”成员
    4.调用类型实例构造器,传入实参,初始化实例字段。
    new完成以上操作后,返回指向新建对象的引用(指针)

    4.2类型转换
    CLR允许将对象转换为它的实际类型或基类型。
    Object o = new EmPloyee(); //转换为基类型
    EmPlyee e =(Emplyee)o; //转换为实际类型,有可能失败,所以要显示转换。

    使用C#的is和as操作符来转型
    is操作符检查对象是否兼容于指定的类型,返回Boolean值(is不会抛异常,对象引用为null返回false);
    通常用法:
    if(o is Employee){ //检查一次
       Employee e = ()o; //再次检查,判断实际类型,再遍历继承层次结构进行核对,消耗性能。推荐用as写法
       //在if语句剩余部分使用e
    }

    as操作符简化写法,并提升性能。
    Employee e = o as Employee; //检查是否兼容,兼容返回对象引用,不兼容返回null
    if(e != null){
      //在if语句中使用e
    }
    以上只进行了一次类型校验。上面is校验2次。
    as不会抛出异常。一般判断是否为null即可

     4.3命名空间和程序集
    命名空间(namespace)用户对相关类型进行逻辑分组,方便定位类型。命名空间可以让类型名称更具唯一性。通过using指令,可以省略类型前缀减少输入量。

    using为类型或命名空间创建别名:
    using WintellectWidget=Wintellect.Widget;

    注:命名空间和程序集(实现了一个类型的文件)不一定是相关的。同一个命名空间中的各个类型可能是在不同程序集中实现的。比如,System.IO.FileStream类型在MSCorLib.dll中实现,System.IO.FileSystemWatcher类型在System.dll中实现。

    4.4运行时的相互联系
    每个方法的调用前(“序幕”)都会在栈中分配局部变量内存并将局部变量初始化(null,0),但访问未显示初始化局部变量会报错:使用了未赋值的局部变量。栈是从上到下构建的。

    对象包含:“类型对象指针”(指向类型对象)、“同步块索引”和类型对象(包含字段和方法表)。

    图中红框部分的方法表示JIT编译(即时编译)的代码。

  • 相关阅读:
    哈夫曼树
    顺序栈和链栈
    线性表(二) 单链表的增删改查及源码 (修改)
    线性表(二):单链表的增删改查及源码
    线性表(一):顺序表的增删改查及源码
    从头学数据结构--跟随浙大陈越姥姥的步伐
    Java学习笔记--scanner获取键盘输入
    关于方法、变量、类等命名规范
    Java学习笔记--类型自动转换、强制类型转换、溢出
    java学习笔记--重载
  • 原文地址:https://www.cnblogs.com/zxx193/p/3557954.html
Copyright © 2011-2022 走看看