要将您转换为的值类型装箱System.Object
- 这本身对我来说似乎是“错误的”(因为转换应该将值转换为另一种类型(因此将 Int32 转换为 Object 应该是数据丢失操作,因为 Object 没有实例自己的状态)或将接口指针转换为父对象(这不会影响所指向对象的状态,并且是编译时关注的问题)。在 CLR 中装箱值类型时,您正在复制值当您只想执行第一个任务(将值复制到堆,或者至少获得对它的引用)时,同时丢失了接口信息。
Integer
Java 用和的强类型解决了这个问题Long
。为什么.NET 没有这个?
我有自己的实用程序源代码集合,我喜欢将它们包含在其他项目中,它们包括自己的强类型盒装类(例如 BoxedInt32)的实现,它们覆盖了隐式和显式转换运算符,因此它们的工作方式与转换为 Object 可以,除非不必实际转换为对象(从而保留类型数据)。所以我可以这样做:
private BoxedInt32 _reference;
public Int32 GetValue{ return _reference; }
那么为什么.NET 在四个主要版本之后仍然没有强类型的盒装类型呢?