我在一个测验中有一个问题,问“接下来做什么?”:
// Value is an int
IComparable thing = (IComparable)value;
显然答案是拳击,但我不知道为什么。为什么要考虑这种拳击,它在做什么?我的印象是只能使用object
才能进行拳击。
为什么将此视为拳击
因为通过创建包含值的对象(“框”)将值类型转换为引用类型。用与object
相同的方式进行装箱。
正在做什么
装箱,但结果类型为IComparable
。
我给人的印象是拳击只能对物体进行。
[不,装箱对值类型的继承层次结构中的任何引用类型都可能发生。实际上,这意味着:
object
ValueType
Enum
(用于枚举)装箱会在您将值“装箱”(或简单地将其转换为对象类型时发生。)>
最常见的示例是将值强制转换为对象:
var num = 5; //Integer value var boxed = (object)num; //object
但是继承链或已实现接口上的所有内容都可以正常运行,并且Int32实现IComparable:https://docs.microsoft.com/en-us/dotnet/api/system.int32?view=netframework-4.8
因为int(Int32的别名)实现了IComparable。