zoukankan      html  css  js  c++  java
  • 《CLR Via C#》 学习心得之二 类型基础

      今天看了,类型基础这一章的内容,正好总结下,顺便分享下自己的感悟。

    1,System.Object类型的意义

      每个类型最终都是从System.Object派生,那么Object是最终的基类。它有四个公共方法,分为:

      1,Equals。如果两个对象具有相同的值,这里相同的值有两层含义:一,两个引用对象是否相等,也就是说是否引用相同的地址;二,是否有相同的Value值。

      2,GetHashCode。返回对象的值的一个哈希表。

      3,ToString。该方法返回类型的完整名称。

      4,GetType。返回从Type派生的一个对象的实例。

    2,new操作符的作用

      new操作符所做的事情有以下几点:

      1,它计算类型及其所有基类型(一直到System.Object)中定义的所有实例字段需要的字节数。堆上的每个对象都需要一些额外的成员——即“类型对象指针”和“同步块索引”。

      2,它从托管堆中分配指定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为0。

      3,它初始化对象的“类型对象指针”和“同步块索引”成员。

      4,调用类型的实例构造器,向其传入在对new的调用中指定的任何实参。

      new执行了所有的这些操作之后,会返回指向新建对象的一个引用,如果想要为分配的内存释放对象,则调用垃圾回收机制。

    3,类型转换

      CLR最重要的特性之一就是类型安全性,c#不要求任何特殊语法即可将一个对象转换为它的任何基类型,因为向基类型的转换被认为是一种安全的隐式转换,然而,将对象转换为它的某个派生类型时,c#要求开发人员只能进行显式转换。

    代码如下:

    public class Program
    {
        public static void Main()
        { 
           //不需要转换
           Object o=new Employee();
           //需要转换
           Employee e=(Employee) o;
        }
    }        

    4,Is和As操作符的作用

      1,is操作符检查一个对象释放兼容于指定的类型,并返回一个布尔值,is操作符永远不会抛出异常。

      2,as操作符的工作方式与强制类型转换一样,只是它永远不会抛出一个异常——相反,如果对象不能转型,结果就是null。

    5,运行时的相互联系

      类型、对象、线程栈和托管堆在运行时的相互关系。

      1,如果已加载了CLR的一个进程,在这个进程中,可能存在多个线程。一个线程创建时候,会分配到一个1MB大小的栈,这个栈的空间用于向方法传递实参,并用于方法内部定义的局部变量。栈是从高地址想地址构建的。

      2,在调用一个方法时候,还会将一个“返回地址”压入栈,被调用的方法在结束之后,应该返回到被调用的位置。

      3,在托管堆中分配类型的对象,堆上的所有对象都包含两个额外的成员:类型对象指针和同步块索引。定义一个类型时候,可以在类型的内部定义静态数据字段,为这些静态数据字段提供支援的字节是在类型对象自身中分配的,在每个类型对象中,最后都包含一个方法表。在方法表中,类型中定义的每个方法都有一个对应的记录项。

      4,构造器实际上就是修改对象状态的方法。

       最后,总结下,在看本章内容时,主要看了类型、对象、线程栈和托管堆在运行时的相互关系。理解了实例成员是属于类的对象,静态成员是属于类的。实例的形式是有两种,一种是类的实例,也就是对象;另一种是类中定义的实例字段。

  • 相关阅读:
    自定义控制器的View(loadView)及其注意点
    多控制器之UIWindow
    多控制器之UIApplication
    浅谈Xcode5和Xcode7在系统创建的文件夹和文件中的区别
    自动计算label字体的高度和图片拉伸处理(封装成分类分享)
    左滑功能和多选功能(在一些列表都会用到的功能)
    数据刷新
    字典转模型第三方框架---MJExtension
    UI之UItableView重用机制的性能问题
    如何设置苹果电脑自带的wife连接手机
  • 原文地址:https://www.cnblogs.com/cr330326/p/2720459.html
Copyright © 2011-2022 走看看