C#类型转换(转载&摘抄&整理:供自己查阅学习)
在数据类型转换中,C#相对其它语言来说是比较严格的。
一、转换规则:(你必须知道的.net)
- C#允许在继承链中向下转型,即任何类型都可以安全地隐式转换为其基类类型;
- 任何类型转换为其派生类型时,必须进行显示转换,转换的规则是:(类型名)对象名,转换失败会抛出异常;
- CLR是类型安全的,任何对象都可以用GetType方法获得其精确类型;
- 基本类型可以使用Covert类实现类型转换;
- 除了string以外的其他类型都有Parse方法,用于将字符串类型转换为对应的基本类型;
- 值类型和引用类型的转换机制称为装箱(boxing)和拆箱(unboxing)。
二、C#提供了一种is操作符进行换算。is模式规则如下:
- 检查对象类型的兼容性,并返回结果,true或者false;
- 不会抛出异常;
- 如果对象为null,则返回值永远为false。
View Code
if(cls1 is class2) { class2 cls2=(class2)cls1; } else console.write("ERROR!");
三、C#还提供例外一种as的类型转换方式,as模式规则如下:
- 检查对象类型的兼容性,并返回结果,如果不兼容就返回null;
- 不会抛出异常;
- 如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常。
View Code
Class2 cls2 = cls1 as Class2; if (cls2!=null)//判断cls2是否为空,如转换失败cls2为空。 { System.Console.WriteLine("Ok"); } else { System.Console.WriteLine("Error!"); }
四、几种类型转换的比较
1.is模式和as模式对比:is模式要进行两次数据类型的判断,而as只需要一次转换,性能高。但是is能作用于不可为空类型(如值类型),as不能作用于此类型。
2.as 和强制类型转换对比:as比强制转换能好,毕竟转换失败它不会抛出异常。但是强制转换能够处理“用户自定义转换”,而as就不行了。