为什么我可以将整数转换为IComparable?

问题描述 投票:0回答:3

我在一个测验中有一个问题,问“接下来做什么?”:

// Value is an int
IComparable thing = (IComparable)value;

显然答案是拳击,但我不知道为什么。为什么要考虑这种拳击,它在做什么?我的印象是只能使用object才能进行拳击。

c# boxing icomparable
3个回答
2
投票

为什么将此视为拳击

因为通过创建包含值的对象(“框”)将值类型转换为引用类型。用与object相同的方式进行装箱。

正在做什么

装箱,但结果类型为IComparable

我给人的印象是拳击只能对物体进行。

[不,装箱对值类型的继承层次结构中的任何引用类型都可能发生。实际上,这意味着:

  • 值类型支持的任何接口
  • object
  • ValueType
  • Enum(用于枚举)

0
投票

装箱会在您将值“装箱”(或简单地将其转换为对象类型时发生。)>

最常见的示例是将值强制转换为对象:

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


0
投票

因为int(Int32的别名)实现了IComparable。

© www.soinside.com 2019 - 2024. All rights reserved.