Чтобы упаковать тип значения, вы приводите его к System.Object
- это само по себе кажется мне «неправильным» (поскольку приведение должно либо преобразовать значение в другой тип (поэтому преобразование Int32 в Object должно быть действием с потерей данных, поскольку Object не имеет собственное состояние экземпляра) или преобразование указателя интерфейса в родительский (что не влияет на состояние объекта, на который указывает, и является проблемой времени компиляции). При упаковке типа значения в CLR вы копируете значение в кучу и одновременно с потерей информации об интерфейсе, когда вы действительно хотите выполнить только первую задачу (скопировать значение в кучу или хотя бы получить ссылку на него).
Java решает эту проблему с помощью сильных типов Integer
и Long
. Почему в .NET этого нет?
У меня есть собственная коллекция исходного кода утилиты, которую я люблю включать в другие проекты, и они включают в себя собственные реализации строго типизированных упакованных классов (таких как BoxedInt32), которые переопределяют неявные и явные операторы преобразования, поэтому они работают так же, как приведение к объекту делает, за исключением того, что нет необходимости фактически приводить к объекту (таким образом сохраняя данные типа). Итак, я могу сделать это:
private BoxedInt32 _reference;
public Int32 GetValue{ return _reference; }
Так почему же .NET после четырех основных выпусков все еще не имеет коробочных типов со строгой типизацией?
ref
параметры решают эту проблему только в том случае, если указанному программному компоненту не нужно хранить эту ссылку в своем собственном состоянии. - person Dai   schedule 03.09.2012