gpt4 book ai didi

c# - 试图理解类型转换和装箱/拆箱

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:42 26 4
gpt4 key购买 nike

我目前正在努力研究选角和拳击。据我目前了解:

  • 装箱 - 值类型到引用类型(即 int 到对象)
  • 拆箱 - 引用类型到值类型(即对象到 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"

有什么想法吗?

最佳答案

类型转换不是装箱或拆箱,但它可能导致两者。由于 int 不是 FirstClass,也就是说,int 不继承或扩展 FirstClass,因此您不能将其转换为 FirstClass 类型。

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

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

关于c# - 试图理解类型转换和装箱/拆箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13262024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com