jas*_*son 44
拳击是指转换不可为空值类型的成引用类型或值类型,它实现了一些接口的转换(说int来IComparable<int>).此外,底层值类型到可空类型的转换也是装箱转换.(警告:关于这个主题的大多数讨论将忽略后两种类型的转换.)
例如,
int i = 5;
object o = i;
Run Code Online (Sandbox Code Playgroud)
转换i为类型的实例object.
拆箱是指显式转换从实例object或ValueType到一个不可为空值类型,接口类型的转换到非可空值类型(例如,IComparable<int>至int).此外,可空类型到底层类型的转换也是拆箱转换.(警告:大多数关于此主题的讨论将忽略后两种类型的转换.)
例如,
object o = (int)5;
int i = (int)o;
Run Code Online (Sandbox Code Playgroud)
将装箱的整数转换o为类型的实例int.
类型转换是表达式到给定类型的显式转换.从而
(type) expression
Run Code Online (Sandbox Code Playgroud)
显式转换expression为类型的对象type.
Meh*_*ari 27
装箱和拆箱是类型转换的子集.Boxing是将值类型视为引用类型的行为(实际上,它涉及将该值类型的内容(从堆栈)复制到堆并返回对该对象的引用).这允许在期望兼容引用类型的任何地方传递值类型.它还允许对值类型执行虚方法调用和引用类型的其他功能.取消装箱与此操作相反(从装箱对象中取回值类型).
类型转换是用于从特定类型的变量到另一个类型的任何类型的转换的术语.这是一个更广泛的概念.
几分钟前,我回答了一个涵盖这种差异的相关问题.总而言之,我对C#cast运算符生成的不同类型的IL指令进行了分类:
boxIL指令)和拆箱(unboxIL指令)dynamic_cast<Type>在C++中,使用castclassIL指令进行验证)static_cast<Type>在C++中,对于基本类型之间的不同类型的转换,有大量的IL指令)op_XXX方法的方法调用).Jud*_*ngo 19
Boxing是将值类型(int,double,float,Guid等)转换为引用类型(System.Object,System.String等)的术语.执行此装箱操作会在堆上分配内存(垃圾收集器最终需要回收).拆箱与此过程相反,采用引用类型并将其转换为值类型.
转换是一种类型(比如System.Object)并将其视为另一种类型(比如System.String).
当您在C#中打包时,您将其转换为其他类型.不同之处在于,它会在创建新的引用类型时分配额外的内存.
底线:装箱是一种特殊的类型转换,它将值类型转换为引用类型,这需要分配新的引用类型.
装箱/拆箱和类型转换是两种不同的操作,但它们使用相同的语法。
仅当谈论它的人不知道到底发生了什么时,它们才可以互换使用......
装箱是将值类型作为对象存储在堆上,而拆箱则是从对象中读取值。您只能将值拆箱,因为它是精确类型。
强制转换是指将一种基本类型转换为另一种基本类型(例如从 anint到 a long),或者更改引用的类型(例如从List<int>到IEnumerable<int>)。
| 归档时间: |
|
| 查看次数: |
43594 次 |
| 最近记录: |