キャスト先の値の型をボックス化するにSystem.Object
は、それ自体が「間違っている」ように見えます(キャストでは値を別の型に変換する必要があるため(したがって、オブジェクトにはインスタンスがないため、Int32をオブジェクトに変換することはデータ損失のあるアクションになるはずです)独自の状態)またはインターフェイスポインタを親に変換する(これは、ポイントされているオブジェクトの状態に影響を与えず、コンパイル時の問題です)。CLRで値型をボックス化する場合、値をコピーします。最初のタスク(値をヒープにコピーするか、少なくともその値への参照を取得する)だけを本当に実行したい場合は、ヒープに同時にインターフェイス情報を失います。
Javaは、との強力なタイプを使用してこの問題を解決しInteger
ますLong
。なぜ.NETにこれがないのですか?
他のプロジェクトに含めたいユーティリティソースコードの独自のコレクションがあり、それらには、暗黙的および明示的な変換演算子をオーバーライドする、厳密に型指定されたボックス化されたクラス(BoxedInt32など)の独自の実装が含まれているため、オブジェクトにキャストすることは、実際にオブジェクトにキャストする必要がないことを除いて、行います(したがって、型データを保持します)。だから私はこれを行うことができます:
private BoxedInt32 _reference;
public Int32 GetValue{ return _reference; }
では、なぜ.NETは、4つのメジャーリリースの後、まだ強く型付けされたボックス型を持たないのでしょうか。