2009-07-30 16 views

答えて

12

基本的には、値型のセマンティクスで処理される

任意structValueTypeから継承すなわち何か);-pチートです。しかし、ボクシング変換objectが必要に応じてあります。 structobjectにキャストすると、値*のデータ(クローンとして)を含む特別なオブジェクト(管理されたヒープ上に)が作成されます。

ボックス版は参照型です。これを元に戻してstructのバージョンに戻すことができます。これは逆転します(クローンデータがヒープ上のオブジェクトからローカル値にコピーされます)。


* =それは箱nullに、空Nullable<T>でない限り。同様に、nullは空欄にunboxes Nullable<T>です。

+0

魔法(不正行為)がどのように起こっているかについて私に説明したり、リンクを指摘したりすることはできますか?つまり、構造体は値型ですが、オブジェクト参照型は – skjagini

+0

@skjaginiです。単純に、コンパイラとランタイムは、単に値型から派生したものを簡単に見つけることができます。 ECMA335 –

+0

+1 C#のような言語では、ボックス化された構造体が値型であると推測されますが、CLRの中では、すべてのマネージ型の型は対応する値型のフィールドをカプセル化する対応するクラス型を持ち、そのフィールド。 C#言語仕様がそのようなものを値型と呼んでも、参照型として動作します。 – supercat

関連する問題