.net - 装箱/拆箱和类型转换有什么区别?

标签 .net casting boxing unboxing

装箱/拆箱和类型转换之间有什么区别?

这些术语似乎经常可以互换使用。

最佳答案

装箱是指将不可空值类型转换为引用类型或将值类型转换为其实现的某个接口(interface)(例如 intIComparable<int> )。此外,基础值类型到可为空类型的转换也是装箱转换。 (警告:此主题的大多数讨论都会忽略后两种类型的转换。)

例如,

int i = 5;
object o = i;

转换iobject 类型的实例.

拆箱是指从 object 实例的显式转换或ValueType到不可为空值类型,即接口(interface)类型到不可为空值类型的转换(例如, IComparable<int>int )。此外,可空类型到基础类型的转换也是拆箱转换。 (警告:此主题的大多数讨论都会忽略后两种类型的转换。)

例如,

object o = (int)5;
int i = (int)o;

转换 o 中装箱的整数到 int 类型的实例。

类型转换是将表达式显式转换为给定类型。因此

(type) expression

显式转换expressiontype 类型的对象.

关于.net - 装箱/拆箱和类型转换有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1085144/

相关文章:

c# - 拥有一个带有 C++ 类的 DLL,即构造函数接受其他 C++ 类,如何使 C# 能够创建其实例?

python - 扩展的类似 dict 的子类以支持转换和 JSON 转储而无需额外的

c++ - 我能否判断转换为父类的对象类型最初是否是 C++ 中的子类?

c# - 拳击内存问题

c# - 在 x64 下的 WinForms webbrowser 控件中显示 pdf

javascript - 部署时为 "That assembly does not allow partially trusted callers"

.net - Raspbian 操作系统(Linux 和 Mono)上的 VB.net

c# - 有没有办法为泛型实例提供构造函数参数?

java - 检查 Boolean.TRUE/Boolean.FALSE 是否可以避免装箱/拆箱?

c# - 在 "out"参数中传递值类型是否会导致变量被装箱?