C# 中的类型转换、委托与事件详解
1. 类型转换基础:装箱与拆箱
在 C# 里,从任何结构体(或基本类型)转换为 object
类型是隐式转换,这其实就是我们之前接触过的装箱操作。例如:
Currency balance = new Currency(40, 0);
object baseCopy = balance;
当执行这个隐式转换时, balance
的内容会被复制到堆上的一个装箱对象中,并且 baseCopy
对象引用会指向这个对象。实际上,当我们定义 Currency
结构体时,.NET 框架会隐式提供一个隐藏的类,即装箱的 Currency
类,它包含与 Currency
结构体相同的字段,但它是引用类型,存储在堆上。这种情况在我们定义值类型(无论是结构体还是枚举)时都会发生,并且对于所有基本值类型(如 int
、 double
、 uint
等)都存在类似的装箱引用类型。在源代码中无法也没必要直接访问这些装箱类,但当值类型转换为 object
类型时,它们就在幕后发挥作用。当我们将 Currency
隐式转换为 object
时,会实例化一个装箱的 Currency
实例,并使用 Cur