如何:使用 as 和 is 运算符安全地进行强制转换(C# 编程指南)

由于对象是多态的,因此基类类型的变量可以保存派生类型。若要访问派生类型的方法,需要将值强制转换回该派生类型。不过,在这些情况下,如果只尝试进行简单的强制转换,会导致引发 InvalidCastException 的风险。这就是 C# 提供 is 和 as 运算符的原因。您可以使用这两个运算符来测试强制转换是否会成功,而没有引发异常的风险。通常,as 运算符更高效一些,因为如果可以成功进行强制转换,它会实际返回强制转换值。而 is 运算符只返回一个布尔值。因此,如果只想确定对象的类型,而无需对它进行实际强制转换,则可以使用 is 运算符。

as 运算符用于在兼容的引用类型之间执行某些类型的转换

as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null 而非引发异常。请看下面的表达式:

注意,as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用强制转换表达式来执行。

============================================================================================================

下面还没有搞明白,明天接着看

c#中的as到底是什么意思啊

比如我定义一个类A一个类BAa=newA();a.getvalue()//实现a的某方法Bb=aasB;b.getvalue()//这到底是实现A的方法还是B的?... 展开
 
 我来答

分享

举报

sinoxlive

推荐于2018-03-26

 

as 进行类型转换。 转型失败返回null,而不是抛出异常。
比如你举例的 B b= a as B;就相当于B b= (B)a;但是如果转型失败后一种就会抛出异常,而前一种b == null;

如果B是A 的基类,那么最后的b.getvalue()实际调用的是a的方法。
如果B不是A的基类,那么b为null b.getvalue() 会引发异常

 

22

评论(1)

分享


举报

v沛v

2012-12-05

sinoxlive 说的对。

其它的人。别误导别人啊
as 就是转换

一般是用在a继承b,或者a实现接口b
B b= a as B;
b.getvalue()//这到底是实现A的方法还是B的?
这里实现的还是A的方法。
这是一个典型的多态用法
程序中有一句话,编译看左边,运行看右边
右边a 原来是A类型。那么b.getvalue()就是A类型的getvalue
----------------------------------------------------------------------------------------------
如果类A里有x,y属性
类B里也有x,y属性
将对象a转换成类B后原有的a.x,a.y的值是被B的初始化函数重置掉 还是保留下来?

A的值会保留下来
A转换成B ,并不是说是重新生成了一个B,A还在。只是它多加了一个名称而已

最新文章

  1. 【腾讯Bugly经验分享】程序员的成长离不开哪些软技能?
  2. Mac Pro 软件安装/个性化配置 汇总
  3. expr 命令
  4. android HorizontalScrollView
  5. Yii2 捕获错误日志
  6. PHP 使用 Redis
  7. jQuery HTML CSS 方法
  8. [转] Creating a Simple RESTful Web App with Node.js, Express, and MongoDB
  9. 使用Pechkin将HTML网页转换为PDF
  10. Java NIO------基础理论之缓存区
  11. JavaScript系列----面向对象的JavaScript(1)
  12. Mysql5.7.20使用group by查询(select *)时出现错误--修改sql mode
  13. java如何获取一个对象的大小
  14. Linux获取网络接口信息
  15. Mongodb 相关链接
  16. apm固定翼调试方法
  17. eMMC基础技术9:分区管理
  18. Linux用户群组权限恢复
  19. The Little Prince-12/08
  20. cc、gcc、g++、CC的区别概括

热门文章

  1. 基于SILVACO ATLAS的a-IGZO薄膜晶体管二维器件仿真(02)
  2. JS-try/catch方法判断字符串是否为json格式
  3. 吴裕雄--天生自然TensorFlow2教程:手写数字问题实战
  4. Nexus-配置vPC 实验三
  5. XCOJ 1205 A.First Blood
  6. dom4j递归解析XML字符串所有子节点
  7. JS清除空格之trim()方法
  8. 一份非常值得一看的Java面试题
  9. [经验] 如何将 Java 项目发布到云服务器上并可以访问
  10. Android 华为推送库下载不了