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即可
原文:http://www.cnblogs.com/zxx193/p/3557954.html