is和as优于强制性类型转换
来源:互联网 发布:linux oracle rac搭建 编辑:程序博客网 时间:2024/04/30 05:38
我们经常要用到类型转换,但是对于如何选择转换的方式却并不一定都了解.
比如
(1)
object o1 = new MyObj1();
MyObj2 o2 = o1 as MyObj2;
if(o2!=null)
{
//other code here...
}
else
{
//failed to cast...
}
(2)
object o1= new MyObj1();
try
{
MyObj2 o2 = (MyObj2)o1;
if(o2!=null)
{
//other code here
}
else
{
//...
}
}
catch
{
//throw;
}
如果我们用as来转换的话,除非MyObj1和MyObj2有继承关系,否则转换将失败,而用强制类型转换则不一定,只要MyObj1类有自定义类型转换函数MyObj2,则可能转换成功,不过上述代码(2)也不会成功,因为强制类型转换针对的是编译时类型,而对于编译时类型o1为object类型,并没有自定义转换为MyObj2的函数.
as和强制类型转换的区别在于,as不会在意是否存在自定义类型转换函数,它针对的时运行时类型,所以as转换成功的可能性只有2者具有同一运行时类型,即2者具有相互继承关系;而强制类型转换会执行自定义转换函数,并且它针对的是编译时类型,所以要注意(2)类似的错误.
还有as不能用于Int(float)等值类型.
我们常用到的foreach用的是强制类型转换,因为它需要能对Int等类型支持.
is的原理与as类似,不过它返回bool类型,is可与强制类型转换搭配使用,可避免转换异常,但最好不要把is和as搭配,实际上is也做了as的转换操作,这样会影响效率.
- is和as优于强制性类型转换
- as和is类型转换
- 3、强制类型转换、as和is
- .NET 类型转换is和as
- 条款3:操作符is或as优于强制转换
- c# as is 类型转换
- c# as is 类型转换
- c# as is 类型转换
- c# as is 类型转换
- c# as is 类型转换
- c# as is 类型转换
- c# as is 类型转换
- c# as is 类型转换
- 引用类型转换与is和as操作符
- C#的as, is和类型强制转换
- is和as在类型转换时的性能差异
- Effective C# Item3:操作符as或is优于强制转换
- C# 类型转换以及is、as
- MVC学习笔记3 认识Routing
- Notepad.exe中菜单的拦截
- Polish 导入使用外部jar
- SkyEye硬件模拟平台:SkyEye 介绍
- ExtJS 开发总结
- is和as优于强制性类型转换
- 多线程编程的好处及在什么情况下用多线程技术
- Enterprise Library 4 缓存快速入门
- 关于内存的一些理解
- 44b0引导注释
- 的说法是不固定
- ANSI C的类型限定词
- TerryLee
- 程序猿--之歌