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 运行时相互关系
    

         
posted @ 2007-09-16 18:01 包建强 阅读(241) 评论(2)  编辑 收藏 所属分类: .NET CLR

  回复  引用  查看    
#1楼 2008-04-07 12:20 | John Rambo      
很好,这个系列收藏了
  回复  引用  查看    
#2楼 2008-08-28 11:17 | Ivan-Yan      
最近也在一边读,一边写心得,
正好可以参考一下老赵的笔记~!

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-10-05 17:16 编辑过


相关链接: