Value object
C#では、クラスは参照型であり、構造体( C言語の構造体から派生した概念)は値型である。 したがって、クラス定義から派生したインスタンスはオブジェクトであり、構造体定義から派生したインスタンスはValue Objectと呼ばれる(正確には、構造体を不変にして、属性を読み取り専用として宣言する事でValue Objectを表すことができる )。
次の手順を実行して、値オブジェクトの特性をC#クラスに追加できる。
Object.Equalsをオーバーライドして、オブジェクトがビジネスロジックを使用して比較されることを保証する。
Equalsメソッドが使用されるように、デフォルトの動作==および!=を演算子オーバーロードする。
Object.GetHashCode メソッドをオーバーライドして、等価性を持つオブジェクトのハッシュが同じとなるようにする。
プロパティセッターを削除し、コンストラクターを介してのみメンバー値を渡すことにより、クラスを不変にする 。
あるいは、C# 9.0で追加されたレコードも値オブジェクトとなる型の作成に使用できる。