首页 > 其他 > 详细

第二部分 设计类型:第4章 类型基础

时间:2014-02-21 01:43:33      阅读:334      评论:0      收藏:0      [点我收藏+]

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

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

原文:http://www.cnblogs.com/zxx193/p/3557954.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!