关于 as ,is,和强制转换
1.as只能用于引用类型不能用于值类型。
2.操作符 as和 is 都只检查被转换对象的运行时类型,并不执行其他的操作
3.is的原理与as类似,不过它返回bool类型,is可与强制类型转换搭配使用,可避免转换异常,但最好不要把is和as搭配,实际上is也做了as的转换操作,这样会影响效率.
4.如果我们用as来转换的话,除非MyObj1和MyObj2有继承关系,否则转换将失败,而用强制类型转换则不一定,只要MyObj1类有自定义类型转换函数MyObj2,则可能转换成功,因为强制类型转换针对的是编译时类型,而对于编译时类型o1为object类型,并没有自定义转换为MyObj2的函数.
5.as和强制类型转换的区别在于,as不会在意是否存在自定义类型转换函数,它针对的时运行时类型,所以as转换成功的可能性只有2者具有同一运行时类型,即2者具有相互继承关系;而强制类型转换会执行自定义转换函数,并且它针对的是编译时类型,所以要注意(2)类似的错误.
4.一般情况我们应该先考虑使用as进行类型转换,然后再考虑使用is,最后才考虑使用强制转换。
|
|
as |
强制转换 |
|
转换失败是否抛出异常 |
No |
Yes |
|
支持值类型和引用类型转换 |
只支持引用类型 |
Yes |

浙公网安备 33010602011771号