LIST 2●执行装箱的C#代码。将数值直接代入对象中。运行代码后,输出0和1。也就是说变量a和o没有同一性(点击放大) 图2●C#中的装箱法。对存放于内存堆栈区中的int型结构体(strUCts)装箱时,就会静静地在内存堆区中生成对象。因此就无法确保与初始值的匹配性。(点击放大) 笔者利用装箱法,用C#试着写了一段与在Java的Vector矢量类中保存数值类似的代码(LIST 3)。虽然ArrayList类要引数中提取对象型变量,但这里由于通过直接int型变量,因此代码非常整洁。
不过,并没有解决多余的内存消耗和数值的同一性问题。因为只是单纯地实现了自动向对象的转换(图3)。 LIST 3●与LIST 1起相同作用的C#代码。由于具有装箱法,因此可以直接向ArrayList中追加数值