Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试图理解类型转换&;装箱/拆箱_C#_Casting_Boxing - Fatal编程技术网

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