zoukankan      html  css  js  c++  java
  • CLR笔记:4.类型基础

    4.1 所有类型都派生自System.Object
        System.Object提供的方法:GetType(),ToString(),GetHashCode(),Equals(),MemberwiseClone(),Finalize()
        所有对象都是用new操作符创建,创建过程:
            1. 计算对象大小,包括“类型对象指针”和“同步块索引”
            2.从托管堆分配对象的内存
            3.初始化对象的“类型对象指针”和“同步块索引”
            4.调用ctor,传入相应参数——最终会调用到System.Object的ctor,该ctor是空操作
            5.返回新对象的引用/指针

    4.2 强制类型转换
        类型安全,CLR的最重要特性之一。
             1.对象转成其基类,不需要任何特殊语法,默认为安全隐式转换    
                Object o = new Employee(); ——将new Employee转为Object基类,可以看作:
                    Employee e = new Employee(); 
                    Object o = e;
             2.对象转成其子类,要显示转换    Employee e = (Employee)o;
                但是,即使显示转换,也会在运行期错误
             基于以上原则,有 类型安全性检测:http://www.cnblogs.com/Jax/archive/2007/08/05/844159.html
        
        is和as操作符
            is:检查一个对象是否兼容于指定的类型,并返回一个bool值——即使类型不对,仅返回false,不会抛出异常;null对象则返回false
                if (o is Employee)
                
    {
                    Employee e 
    = (Employee)o;
                }
                上述代码检测两次对象类型,一次在if中的is,另一次在显示转型时——会影响性能,使用as代替。

            as:用来简化上述代码:永远不会抛出异常,如果对象不能转型,就返回null:
                Employee e = o as Employee;

                
    if (e != null)
                

                    
    //执行操作
                }

    4.3 命名空间和程序集
        CLR不知道namespace概念,using是C#的语法,CLR只认识类型的全称
        C#会自动在MSCorLib.dll中查找所有核心FCL类型,如Object,Int32,String

        记住以下语法:using System = NameSpaceAnotherName;

    4.4 运行时相互关系
        

             
  • 相关阅读:
    6-2 播放厅模块基础环境构建
    6-1 Eureka实战之播放厅模块章节介绍
    5-18 影片模块作业思路讲解
    5-17 影院模块表现层构建
    5-16 影院模块基础环境构建
    5-15 影院模块表结构介绍
    5-14 影片模块整体测试
    5-13 影片保存实现
    5-12 影片保存准备
    5-11 影片详情查询实现
  • 原文地址:https://www.cnblogs.com/Jax/p/894908.html
Copyright © 2011-2022 走看看