我目前正在尝试了解选角和拳击。据我目前的理解:
- 装箱 - 值类型到引用类型(即 int 到对象)
- 拆箱 - 引用类型到值类型(即对象到 int)
- 类型转换 - 目前在我看来类似于拳击,但是 允许您指定您想要引用的对象类型 类型为。 (即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"
有什么想法吗?
最佳答案
类型转换不是装箱或拆箱,但它可能会导致其中任何一个。
由于 int
不是 FirstClass
,也就是说,int 不会继承或扩展 FirstClass
,因此您无法将其转换为 FirstClass
类型。
只有在可能的情况下,类型转换才会导致转换。
因此,您可以从 int 转换为 double,反之亦然,但可能会产生副作用。但您无法从 int
转换为 FirstClass
。
装箱,将值或引用类型包装在包装对象中。至少我是这么认为的。不确定内部是如何工作的,但我的猜测是赋值运算符“=”或强制转换在拆箱时隐式返回包装的值,在装箱时返回包装器对象。
关于c# - 尝试了解类型转换和装箱/拆箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13262024/