C# 入门(12) 转换(conversion)、is 操作符、as 操作符
来源:互联网 发布:mac flapping 编辑:程序博客网 时间:2024/06/05 01:11
C#的转换
参考书籍: 《C#图解教程》
【《Effective C#》提炼总结】提高Unity中C#代码质量的22条准则
推荐使用 is 或 as 操作符而不是强制类型转换。
checked和unchecked运算符
这两个运算符是用来检测溢出的。表达式括号内是表达式,不能放方法。
- checked运算符检测是否转换溢出,溢出的话会抛出OverflowException异常。
- unchecked运算符这会忽略溢出,直接转换。
checked和unchecked语句
这个和checked和unchecked运算符的功能是一样的,只不过是用花括号,就可以不局限于一条表达式了。两种语句可以任意嵌套。
byte sb;ushort sh = 2000;unchecked{ sb = (byte)sh; Console.WriteLine("sb: {0}",sb); //输出208 checked { sb = (byte)sh; //抛出异常 Console.WriteLine("sb: {0}",sb); }}
引用的转换
对于基类引用转换到衍生类引用必须两个引用都先初始化。即便基类不初始化,或为null,可以转换成子类,但是不安全的。所以尽量对引用先初始化。
装箱(boxing)和拆箱(unboxing)
装箱是把值类型复制到一个引用类型里。可以转换下图的类型。
拆箱就是把原来的引用类型强制转换成值类型。转换失败会抛出InvalidCastException异常。
用户自定义转换
这东西我觉得除非自己想重新封装一个数据类型可以用一下,但是可能会让代码看起来没那么清晰。
用户自定义转换一些重要约束:
- 只可以为类和结构定义用户自定义转换。
- 不能重定义标准隐式转换或显示转换。
- 对于源类型S和目标类型T,有下面几个要求
- S和T必须是不同类型。
- S和T没有直接或间接继承关联。
- S和T不是接口或object。
- 转换运算符必须是S或T的成员。
对于多步用户自定义转换,个人更不推荐用了,我觉得这会让代码看得很难理解,见《C#图解教程》P304
is操作符
- 用于判断表达式左边的类型是否可以转换成右边的类型。这就可以安全的进行转换了。
- 只能用于引用转换,装箱,拆箱转换,不能用于用户自定义转换。
as操作符
- 用于强制转换,相比传统强制转换更安全,高效。转换失败不会抛异常,而是返回null。
- 只能用于引用类型或者可空类型。对值类型是无效的,这时用is和强制转换配合。
- 同is运算符,只能用于引用,装箱,拆箱转换。
- 仅当不能使用as进行转换时,才应该使用is操作符。否则is就是多余的。
0 0
- C# 入门(12) 转换(conversion)、is 操作符、as 操作符
- C# 中的IS和AS操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中is和as操作符
- C# is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- C#中的is和as操作符
- Swift入门(十一)——类型转换与is、as操作
- 读书笔记之C#的is和as操作符强制类型转换
- Effective C# 原则3:选择is或者as操作符而不是做强制类型转换
- 读书笔记之C#的is和as操作符强制类型转换收藏
- 图像语义分割技术-深度卷积网络图像识别
- linux下mysql无法启动的处理
- 小程序wx.request请求封装
- 如何更改linux文件目录拥有者及用户组
- niginx command not found
- C# 入门(12) 转换(conversion)、is 操作符、as 操作符
- svn命令总结
- C#学习之Task 的用法1
- Maven项目在Update Maven之后JRE被改成1.5的解决方法(转载)
- 日常笔记
- Linux 网络命令
- 替powerdesigner添加mysql的字符集支持
- A summary: how to use bit manipulation to solve problems easily and efficiently
- Fragment实例之微信界面