(6)C#基础知识_类型转换

1. 转换的种类

1)转换的种类,如下图:

                     

2)强制(显示)转换和隐式转换

           

2. checked&uncheked运算符和指令

checked表示对包含在类的类型转换表达式进行检查,如果溢出就抛出异常;uncheck表示对包含在类的类型转换表达式不进行检查。

 

3. 引用转换(对象之间的转换,区别于纯数字的转换)

1)隐式引用转换(意思是不需要转换)

类型可以隐式转换为它继承链上的,任何类型和接口。

2)显式引用转换

安全的显示引用转换,有以下2种:

(1)往继承链上转换;

(2)null转换,如下图:

                                          

 

 

4. 装箱转换与拆箱转换

1)装箱转换

装箱转换是将值类型转换为引用类型,是隐式转换。装箱操作和其他转换一样,并也没有对转换的内容进行处理,而是创建了一个“副本”,如下图变量i并没有变,而是创建了一个object副本,赋值给oi。

                              

2)拆箱转换

拆箱转换是将引用类型转换为值类型,需显示转换。

                             

3)尽量避免装箱和拆箱

我们之所以研究装箱和拆箱,是因为装箱和拆箱会造成相当大的性能损耗(相比之下,装箱要比拆箱性能损耗大),性能问题主要体现在执行速度和字段复制上。因此我们在编写代码时要尽量避免装箱和拆箱,常用的手段为:

(1)使用重载方法。为了避免装箱,很多FCL中的方法都提供了很多重载的方法。比如我们之前讨论过的Console.WriteLine方法,提供了多达19个重载方法,目的就是为了减少值类型装箱的次数。比如看下面的这段代码:

      Console.WriteLine(3);

刚开始你可能觉的3会装箱为string类型,但是实际上这条语句不会进行装箱操作,是因为Console.WriteLine方法有一个重载的方法,参数就是一个int的值。

      public static void WriteLine(int value);

(2)使用泛型。因为装箱和拆箱的性能问题,所以在.NET 2.0中引用了泛型,他的主要目的就是避免值类型和引用类型之间的装箱和拆箱。我们常用的集合类都有泛型的版本,比如ArrayList对应着泛型的 List<T>,Hashtable对应着Dictionary<TKey, Tvalue>。

(3)tostring方法不是装箱操作。

5. 用户自定义转换

用户可以对类和结构定义转换函数,类似于C++的转换函数;implicit关键字代表隐式或显示转换转换,explicit关键字代表显示转换。

1)单步用户自定义转换

 

2)多步用户自定义转换

6. is和as运算符

1)is 运算符

is运算符只能用于引用转换以及装箱、拆箱转换,不能用于用户自定义转换。

2)as运算符

as运算符类似于强制转换,只不过不会抛出异常,如果转换不成功会返回null; as运算符只能用于引用转换以及装箱,不能用于用户自定义转换和拆箱转换(值转换)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值