C# 试图理解类型转换&;装箱/拆箱
我现在正试着让我的头脑了解演员和拳击。据我目前了解:C# 试图理解类型转换&;装箱/拆箱,c#,casting,boxing,C#,Casting,Boxing,我现在正试着让我的头脑了解演员和拳击。据我目前了解: 装箱-值类型到引用类型(即int到object) 取消装箱-引用类型到值类型(即对象到int) 类型铸造-在我看来,目前似乎类似于拳击,但 允许您指定希望引用的对象类型 类型为。(即int到customObjectType) 我现在正在使用的例子是试图让我的朋友们了解它。 假设我有两个类,一个类中的方法调用另一个类的构造函数 //1st class public class FirstClass { //code for fields
- 装箱-值类型到引用类型(即int到object)
- 取消装箱-引用类型到值类型(即对象到int)
- 类型铸造-在我看来,目前似乎类似于拳击,但 允许您指定希望引用的对象类型 类型为。(即int到customObjectType)
//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的类型更改为头等的引用类型。显然,我的理解有点偏离了方向,因为它会产生错误
"Cannot convert type 'int' to 'Namespace.FirstClass"
有什么想法吗?类型转换不是装箱或拆箱,但它可能会导致任何一种情况。 由于
int
不是第一类
,也就是说,int不会继承或扩展第一类
,因此不能将其强制转换为第一类
只有在可能的情况下,类型转换才会导致转换。
所以你可以从整数变为双精度,反之亦然,可能会有副作用。但是您不能从int
转换为FirstClass
装箱,在包装器对象中包装值或引用类型。至少我是这么想的。不确定内部如何工作,但我猜赋值运算符“=”或强制转换在取消装箱时隐式返回包装值,在装箱时隐式返回包装对象。如何强制转换“int”以成为类的实例?这就是你想做的。我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。相关的帖子谢谢,这为我揭示了一些差异。因此,在上面的场景中,装箱将是一件事,而不是强制转换,因为SecondClass不是从FirstClass派生的。在第一个场景中,您从未将SecondClass强制转换为FirstClass,而是转换为int类型的x。因此,您可以使用装箱,创建一个字段
private int x
,并将数据存储到其中。不过你得做更多的工作。使其适用于强制转换、初始化和赋值。但是Integer类已经做到了。。谢谢,我去看看。刚刚注意到你的用户名,很棒的系列书籍!玩得开心:是的!迫不及待地想看阿莫尔:P