ホームページ  >  記事  >  バックエンド開発  >  値型オブジェクトの 2 つの表現

値型オブジェクトの 2 つの表現

零下一度
零下一度オリジナル
2017-06-23 15:40:281588ブラウズ
1. 値型オブジェクトには、アンボックス化とボックス化の 2 つの表現があります。これに対して、参照型は常にボックス化された形式です。
2. 値型は System.ValueType から派生します。この型は、System.Object と同じメソッドを提供します。ただし、System.ValueType は Equals メソッドをオーバーライドし、2 つのオブジェクトのフィールド値が完全に一致する場合に true を返すことができます。さらに、System.ValueType は GetHashCode メソッドをオーバーライドします。このオーバーライドされたメソッドで使用されるアルゴリズムは、ハッシュ コードを生成するときにオブジェクトのインスタンス フィールドの値を考慮します。このデフォルトの実装にはパフォーマンスの問題があるため、独自の値の型を定義するときに Equals メソッドと GetHashCode メソッドをオーバーライドし、その明示的な実装を提供する必要があります
3。値の型を新しい値の型を定義するための基本型として使用することはできません。または 新しい参照型。そのため、新しい仮想メソッドを値型に導入する必要はありません。すべてのメソッドを抽象にすることはできません。すべてのメソッドは暗黙的にシールされます (オーバーライド不可)。
4、参照型の変数にはヒープが含まれます。 。参照型変数は作成時に null に初期化され、現在テーブル名は有効なオブジェクトを指していません。 null 参照型変数を使用するビューは、NUllReferenceException をスローします。逆に、値型変数には常に基になる型の値が含まれており、値型のすべてのメンバーは 0 に初期化されます。値型変数はポインターではないため、値型にアクセスしても NullReferenceException 例外をスローできません
5 、値型変数 別の値型変数に代入すると、フィールドごとに代入が行われます。参照型変数を別の参照型変数に割り当てると、メモリ アドレスがコピーされるだけです
6. 2 つ以上の参照がヒープ内の同じオブジェクトを参照できるため、1 つの変数に対して実行される操作は、参照先のオブジェクトに影響を与える可能性があります。対照的に、値型変数は自己完結型であり、値型変数に対して実行される操作は、値型変数が定義されると、ヒープ上に割り当てられないため、別の値型変数に影響を与えることはできません。アクティブでなくなった場合、それらに割り当てられたストレージは、ガベージ コレクションを待つ代わりに解放されます

以上が値型オブジェクトの 2 つの表現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。