2

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

  • 装箱 - 值类型到引用类型(即 int 到对象)
  • 拆箱 - 引用类型到值类型(即对象到 int)
  • 类型转换 - 目前在我看来类似于拳击,但允许您分配您希望引用类型的对象类型。(即int to 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"

有什么想法吗?

4

1 回答 1

2

类型转换不是装箱或拆箱,但它可能会导致任何一种情况。由于 an intis not a FirstClass,即int不继承或扩展FirstClass,因此您不能将其强制转换为 type FirstClass

只有在可能的情况下,类型转换才会导致转换。因此,您可以从 int 变为 double ,反之亦然,但可能会产生副作用。但是你不能从一个intFirstClass

装箱,将值或引用类型包装在包装器对象中。至少我是这么认为的。不确定内部是如何工作的,但我的猜测是赋值运算符“=”或强制转换在拆箱时隐式返回包装值,在装箱时返回包装器对象。

于 2012-11-07T01:36:13.220 回答