【问题标题】:boxing unboxing拳击开箱
【发布时间】:2014-12-20 00:01:09
【问题描述】:

我在搜索 C# 中的装箱和拆箱时发现了以下代码 sn-p。

class TestBoxing
{
    static void Main()
    {
        int i = 123;

        // Boxing copies the value of i into object o. 
        object o = i;  

        // Change the value of i.
        i = 456;  

        // The change in i does not effect the value stored in o.
        System.Console.WriteLine("The value-type value = {0}", i);
        System.Console.WriteLine("The object-type value = {0}", o);
    }
}
/* Output:
    The value-type value = 456
    The object-type value = 123
*/

在这里它说即使他的值 i 改变了 o 的值保持不变。如果是这样,那么 o 引用的值是“123”而不是 i。是这样吗?如果 o 存储了 i 的值那么当 I 的值改变时, o 的值也会改变。如果我错了,请纠正我。

【问题讨论】:

  • // Boxing copies the value
  • 需要区分值类型和引用类型。除非您在传递给方法时使用 ref 或 out 关键字,否则值类型总是在分配时被复制。引用类型不会复制而是指向。

标签: c# .net boxing unboxing


【解决方案1】:

装箱是将值类型转换为类型对象或 到此值类型实现的任何接口类型。当 CLR 将值类型框起来,它将值包装在 System.Object 和 将其存储在托管堆上。拆箱从中提取值类型 物体。拳击是隐含的;拆箱是明确的。的概念 装箱和拆箱是 C# 类型系统统一视图的基础 其中任何类型的值都可以被视为一个对象。


int i = 123;
// The following line boxes i. 
object o = i;  


o = 123;
i = (int)o;  // unboxing

请阅读full article on MSDN

【讨论】:

    【解决方案2】:

    装箱:- 从值类型转换为引用类型的过程例如

    int val = 10;
    object Obj = val;
    

    UnBoxing:- 与装箱完全相反,是将引用类型转换为值类型的过程,例如

    int val2 = (int)Obj;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      相关资源
      最近更新 更多