7
値タイプと参照タイプが参照タイプであるオブジェクトタイプの場合、値タイプは値タイプであり、参照タイプは参照タイプから来たときの参照タイプです。値タイプVs参照タイプ - オブジェクトクラスC#
値タイプと参照タイプが参照タイプであるオブジェクトタイプの場合、値タイプは値タイプであり、参照タイプは参照タイプから来たときの参照タイプです。値タイプVs参照タイプ - オブジェクトクラスC#
基本的には、値型のセマンティクスで処理される
任意struct
(ValueType
から継承すなわち何か);-pチートです。しかし、ボクシング変換〜object
が必要に応じてあります。 struct
をobject
にキャストすると、値*のデータ(クローンとして)を含む特別なオブジェクト(管理されたヒープ上に)が作成されます。
ボックス版は参照型です。これを元に戻してstruct
のバージョンに戻すことができます。これは逆転します(クローンデータがヒープ上のオブジェクトからローカル値にコピーされます)。
* =それは箱null
に、空Nullable<T>
でない限り。同様に、null
は空欄にunboxes Nullable<T>
です。
魔法(不正行為)がどのように起こっているかについて私に説明したり、リンクを指摘したりすることはできますか?つまり、構造体は値型ですが、オブジェクト参照型は – skjagini
@skjaginiです。単純に、コンパイラとランタイムは、単に値型から派生したものを簡単に見つけることができます。 ECMA335 –
+1 C#のような言語では、ボックス化された構造体が値型であると推測されますが、CLRの中では、すべてのマネージ型の型は対応する値型のフィールドをカプセル化する対応するクラス型を持ち、そのフィールド。 C#言語仕様がそのようなものを値型と呼んでも、参照型として動作します。 – supercat