C#类型转换(转载&摘抄&整理:供自己查阅学习)

本文深入探讨了C#中类型转换的规则与方法,包括继承链中的隐式转换、派生类型转换的显示规则、使用is和as操作符进行类型检查,以及值类型和引用类型之间的装箱和拆箱机制。

  在数据类型转换中,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就不行了。

转载于:https://www.cnblogs.com/MyVita/archive/2012/04/12/2443441.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值