类型 (一)
类型概述
所有类型都是从Object类派生来的,Object类提供4个公共的实例方法,分别是Equals,GetHashCode,ToString,GetType。2个受保护的方法,分别是Finalize,MemberwiseClone, 如图所示:
a.GetType(); |
注意 |
上面代码存在一个隐式装箱操作,因为这是由System.Object定义的(不能被重写),这些方法期望This参数是指向堆上一个对象的指针,而这只能通过装箱获得。(每个方法事实上第一个参数都是一个隐含的This) |
强制类型转换需要有继承关系
1 从派生类向基类不需要转换
2 从基类向派生类需要转换
namespace Test { class Dock {} class Program { static void Main(string[] args) { //不需要类型转换 object o=new Dock(); //需要类型转换 Dock d = (Dock)o; } } }
|
用Is和As进行强制类型转换
is偏向判断,as偏向转换。
Is永远不会抛出异常, 有两种情况返回false一种情况返回true
{ static void Main(string[] args) { Dock d1 = new Dock(); Dock d2=null; //返回false Boolean b1 = (d is String); //返回false Boolean b2=(d2 is Dock); //返回True Boolean b2 = (d is Dock); } }
|
As也永远不会抛出异常,返回转换结果或者Null
namespace Test { class Dock {} class Program { static void Main(string[] args) { Dock d1 = new Dock(); object o1 = new object(); //返回Null Dock d = o1 as Dock; //转型成功 object o = d1 as object; } } }
|