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就不行了。

posted @ 2012-04-12 10:07  vita  阅读(252)  评论(1编辑  收藏  举报