美文网首页
C# 装箱与拆箱

C# 装箱与拆箱

作者: EinenschnenTag | 来源:发表于2017-08-09 18:16 被阅读0次

    装箱与拆箱

    ·装箱的理解

    1. 装箱在值类型向引用类型转换时发生
    2. 拆箱在引用类型向值类型转换时发生

    例如:
    当值类型转 object 类型时,会在堆中开辟一块新的区域,将值复制过去。同时值的原本类型信息也会保留。

    int a = 5; 
    object obj = (object)a; // 将int转object,发生装箱
    int b = (int)obj; // 从object转回原来的类型,解除装箱
    
    装箱示例.png

    而从 object 转回值类型时,则会将堆中的值压入栈中,解除装箱化。

    拆箱示例.png

    注:堆上的值在压栈时若类型不正确会抛出 InvalidCastException 异常。使用关键字 is 来判断类型是否兼容。

    ·尽量避免装箱

    一般来说,堆上的空间利用,比栈的处理要沉重的多。值类型的优点就是在栈上使用而使程序性能向上。一旦发生装箱则这个优点就消失了,所以要避免装箱的发生。

    • 指明具体的类型
    • 使用模板

    相关文章

      网友评论

          本文标题:C# 装箱与拆箱

          本文链接:https://www.haomeiwen.com/subject/jzpqrxtx.html