FROM P286

1.数字的转换

1.1溢出检测上下文

显示转换可能会丢失数据并且不能在目标类型中同等地表示源值。对于整数类型,C#给我们提供了选择运行时是否应该在进行类型转换时检测结果溢出的能力。通过checked运算符和checked语句来实现。

□代码片段是否被检查称作溢出检测上下文

--如果我们指定一个表达式或一段代码为checked,CLR会在转换产生溢出时抛出一个OverFlowException异常。

--如果代码不是checked,转换会继续而不管是否产生溢出

(1)checked和unchecked运算符

*控制表达式的溢出检测上下文。表达式放置在一对圆括号内并且不能是一个方法。语法如下:

checked(表达式)、unchecked(表达式)

(2)checked语句和unchecked语句

作为运算符时用于圆括号内的单个表达式。而用作语句时执行相同的功能,但控制的是一块代码中的所有转换,而不是单个表达式。

□checked语句和unchecked语句可以被嵌套在任意层次

2.引用转换

引用类型对象由内存中的两部分组成:引用和数据

□由引用保存的那部分信息是它指向的数据类型

□引用类型接受源引用并返回一个指向堆中同一位置的引用,但是把引用“标记”为其他类型

2.1隐式引用转换

与语言为我们自动实现的隐式数字转换类似,还有隐式引用转换。

□所有引用类型可以被隐式转换为object类型。

□任何类型可以隐式转换到它继承的接口

□类可以隐式转换到

--它继承链中的任何类

--它实现的任何接口

 2.2显式引用转换

显式引用转换是从一个普通类型到一个更精确类型的引用转换。

包括:

--从object到任何引用类型的转换

--从基类到从它继承的类的转换

□倒转16-18、16-19的箭头方向,即可以演示显式引用转换。

如果转换的类型不受限制,很可能会导致我们很容易地尝试引用在内存中实际并不存在的类成员。然而,编译器确实允许这样的转换。到那时,若系统在运行时遇到它们则会抛出一个异常。

2.3有效显示引用转换

(1)显示转换是没有必要的。即,语言已经为我们进行了隐式转换。e.g.

(2)源引用是null。e.g.,在下面的代码中,即使转换基类的引用到衍生类的引用通常会是不安全的,但由于源引用是null,这种转换还是允许的。

(3)由源引用指向的实际数据可以安全地进行隐式转换。

3.装箱操作  (值=》引用)

包括值类型在内的所有C#类型都派生自object类型。然而,值类型是高效轻量的类型,因为默认情况下在堆上不包括它们的对象组件。然而,如果需要对象组件,可以使用装箱(boxing)。装箱是一种隐式转换,它接收值类型的值,根据这个值在堆上创建一个完整的引用类型对象并返回对象引用。

3.1装箱是创建副本

一个有关装箱的普遍误解是在被装箱的项上发生了一些操作。其实不是,它返回的是值引用类型副本。在装箱产生之后,该值有两份副本,原始值类型和引用类型副本,每一个都可以独立操作。

4.拆箱转换  (引用=》值)

拆箱(unboxing)是把装箱后的对象转回值类型的过程。

□拆箱是显示转换

□系统在把值拆箱城ValueTypeT时执行了如下的步骤:

--它检测到要拆箱的对象实际上是ValueTypeT的装箱值。

--它把对象的值赋值到变量

5.is运算符

  如先前所说,有些转换是不成功的,并且会在运行时抛出一个InvalidCastException异常,我们可以使用is运算符来检查转换是否会成功完成,从而避免盲目尝试转换。

Expr is TargetType   返回bool

如果Expr可以通过以下方式成功转换成目标类型,则返回true

□引用转换

□装箱操作

□拆箱操作(未找到例子)

通过装箱操作可转换成目标类型的例子:

        static void Main(string[] args){int t = 5;object k = t;if (k is int)Console.WriteLine("!!");    Console.Read();}

输出!!,说明k is int 判断返回true。即对于某装箱结果进行判断时,会自动将其拆箱结果与目标类型进行比较。

关于is的官方文档(必看,有的内容更加详细)

6.as运算符

as运算符和强制转换运算符类似,只是它不抛出异常。如果转换失败,它返回null,而不是抛出异常。

和is运算符类似,as运算符只能用于引用转换和装箱转换,不能用于用户自定义转换或到值类型的转换。

转载于:https://www.cnblogs.com/quintessence/p/9131982.html

review——C# (15)转换相关推荐

  1. java 进制转换算法_算法笔记_033:十六进制转八进制(Java)

    packagecom.liuzhen.systemExe;importjava.util.Scanner;public classMain {//把16进制字符串转成2进制字符串 publicStri ...

  2. Gerrit代码审计系统实战-Gerrit 2.15.14版本快速搭建

    Gerrit代码审计系统实战-Gerrit 2.15.14版本快速搭建  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Gerrit版本选择 1>.查看Gerrit官网 ...

  3. Kettle基本使用(三) —— 转换的使用

    01.转换_concat_fields 将多个字段合并为一个字段:字段定义了类型,如存在空值则报错 转换前: 转换后: 02.转换_值映射 华东.西南.中南映射为南区:西北.东北.华北映射为北区 映射 ...

  4. 计算机基础知识 进制转换,计算机基础之进制转换详解

    进制转换是个老问题了,今天恰巧看见.我详细的去分析下它.留一笔吧 二进制的范围是(0-1), 不包含2 八进制的范围是(0-7) ,不包含8 十六进制的范围是(0-15) ,不包含16 先讲十进制-- ...

  5. Java算法学习:java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制)

    java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制) 这几天在复习C语言的数据结构栈和队列那一章的时候,看到利用栈的特性FILO实现的进制转换十分简洁 想起了java中实现栈的操作十分 ...

  6. 二进制,八进制,十进制,十六进制之间的转换

    1.前言 每次放假最无聊的事情,就是不想起床,不想吃饭,方正就是不想动,躺在床上,看着手机,无聊的刷着QQ空间,虽然现在已经很少人玩QQ空间,可是这种习惯一直保持到现在,都没有改变过,电脑上的QQ突然 ...

  7. 大话二进制,八进制,十进制,十六进制之间的转换

    1.前言 每次放假最无聊的事情,就是不想起床,不想吃饭,方正就是不想动,躺在床上,看着手机,无聊的刷着QQ空间,虽然现在已经很少人玩QQ空间,可是这种习惯一直保持到现在,都没有改变过,电脑上的QQ突然 ...

  8. A002-185-1203

    目录 一.查词文档 3 1.第一次查词 3 1.1需求基线(Requirements baseline) 3 1.2 概念聚类(Conceptual clustering) 7 1.3图形元素(Gra ...

  9. 应用提交 App Store 上架被拒绝

    审核的参考资料 https://developer.apple.com/icloud/documentation/data-storage/index.html https://developer.a ...

  10. Reinforcement Learning Enhanced Heterogeneous Graph Neural Network阅读笔记

    强化学习增强异质图神经网络 代码源:https://github.com/zhiqiangzhongddu/RL-HGNN 摘要 异构信息网络(HINs)涉及多种节点类型和关系类型,在许多实际应用中非 ...

最新文章

  1. 深度学习必备数学知识之线性代数篇(附代码实现)
  2. 计算机科班学习 OS 的正确姿势!
  3. 庞锋 OpenCV 视频 学习进度备忘
  4. windows下安装nodejs及框架express
  5. 搭建eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo
  6. Android改变字体方法——Typeface
  7. echart的关系图高亮_Echarts 环形图 默认高亮展示某个数据
  8. ubuntu国内镜像站点及更新源
  9. 百度语音合成data:audio/x-mpeg;base64转mp3
  10. windows下.bat文件启动多个jar文件 (.bat 批量启动jar)
  11. 微机——微型计算机系统组成及工作原理
  12. 温度转换 python
  13. 将日/分钟数据转为周线、月线或其他周期
  14. 上班拧螺丝的时候不小心空手造了个RPC框架,赶紧记录一下
  15. RTX Excption integer divided by zero at loc (proc= thread=)Process image has been *unloaded
  16. IMF: Interactive Multimodal Fusion Model for Link Prediction
  17. 菜鸟也可以自己封装万能ghost系统
  18. 疯狂Python讲义之变量和简单类型--深入使用字符串笔记4
  19. .py与.pyc文件的区别
  20. 计算异步FIFO的最小深度

热门文章

  1. Kafka 2.7.0服务器允许客户端远程连接
  2. Django 3.2.5博客开发教程:基础配置
  3. JavaFX FXML场景编辑器使用示例
  4. JVM调优:图解对象内存分配过程
  5. scala函数的定义
  6. elasticsearch ik分词插件配置自定义分词词典
  7. seata分布式事务框架原理
  8. Spring Boot @ConfigurationProperties注解的使用
  9. Redisson分布式锁实战(适用于Redis高并发场景)
  10. 很酷的word技巧---删除行前的空格