试图了解Type Casting&装箱/拆箱

时间:2012-11-07 01:30:44

标签: c# casting boxing

我目前正试图让我的头脑围绕铸造和拳击。据我所知:

  • 拳击 - 参考类型的值类型(即int到object)
  • 取消装箱 - 参考类型为值类型(即对象为int)
  • Type Casting - 此刻对我来说似乎与拳击相似但是 允许您指定您希望参考的对象类型 输入为。 (即int到customObjectType)

我正在努力尝试解决这个问题的例子。 假设我有2个类,一个类中的方法调用另一个类的构造函数。

//1st class
public class FirstClass
{
  //code for fields,constructor & other methods

  public void CallOtherClass(int firstClassID)
  {
   int x = firstClassID;
   SecondClass test = new SecondClass(x);
  }

}

//2nd class
public class SecondClass
{
   public SecondClass(FirstClass firstClass)
   {
    //set some fields
   }
} 

好的,所以在上面的场景中我们会遇到一个问题,因为CallOtherClass方法试图设置SecondClass的构造函数,但是SecondClass的构造函数接受FirstClass类型的参数,我们可以提供的只是一个int。

据我所知,这是使用类型转换的好时机?像下面的东西。

//1st class
public class FirstClass
{
  //code for fields,constructor & other methods

  public void CallOtherClass(int firstClassID)
  {
   int x = firstClassID;

   FirstClass a;
   a = (FirstClass)x;

   SecondClass test = new SecondClass(a);
  }

}

//2nd class
public class SecondClass
{
   public SecondClass(FirstClass firstClass)
   {
    //set some fields
   }
}

在我看来,我觉得将x的类型更改为FirstClass的引用类型。显然,我的理解是偏离某些行,因为它会产生错误

"Cannot convert type 'int' to 'Namespace.FirstClass"

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

类型转换不是装箱或拆箱,但它可能会导致。 由于int不是FirstClass,即 int 不会继承或扩展FirstClass,因此您无法将其转换为FirstClass输入int

类型转换会导致转换,只有在可能的情况下才会这样做。 所以你可以从int到double,反之亦然,可能有副作用。但是你无法从FirstClass转到{{1}}。

装箱,在包装器对象中包装值或引用类型。至少我就是这么想的。不确定内部是如何工作的,但我的猜测是赋值运算符“=”或者在取消装箱时隐式返回包装的值,以及装箱时的包装器对象。