Microsoft には、構造体の使用に関する次の規則があります。
型のインスタンスが小さく、一般的に寿命が短い場合、または一般的に他のオブジェクトに埋め込まれている場合は、クラスではなく構造体を定義することを検討してください。
型が次の特性をすべて備えていない限り、構造体を定義しないでください。
- プリミティブ型 (integer、double など) と同様に、単一の値を論理的に表します。
- インスタンス サイズは 16 バイト未満です。
- 不変です。
- 頻繁に箱詰めする必要はありません。
私が理解している限り、値型の動作が必要な場合は構造体を作成します。もちろん、これにより、関数に割り当てて渡すときにオーバーヘッドをコピーできます。しかし、なぜ 2 と 3 に従うのでしょうか。値の型が大きすぎる場合はどうなりますか? さらに、不変型を値型にする理由がわかりません。型が不変の場合は、とにかく変更できないため、参照渡しの時間を節約することをお勧めします。
私が尋ねている理由は、オブジェクトが Vector2d タイプの Coordinates、Velocity などのプロパティを持つゲームを作成しているためです。問題は、Vector2d の不変の構造体 (大量の追加メモリが必要ではないでしょうか?)、可変の構造体 (人々は彼らが悪だと言う)、または単なるクラス (私は常に vector.Clone() を呼び出す必要があります) を作成する必要があります。同じベクトル変数を持つ 2 つのオブジェクトを意図せず取得する可能性があります)