7

asp.net でビジネス ロジックを記述するいくつかの方法に出くわしましたが、以下の 2 つの例について疑問に思っています。構造体を使用してクラス変数を格納する利点は何ですか。

namespace Shopping
{
   public struct ShoppingCart
   {
       public string Color;
       public int ProductId;
   }

   public partial class MyShoppingCart 
   {

       public decimal GetTotal(string cartID)
       {
       }

       // Some other methods ...
   }
}

namespace Shopping
{
   public partial class MyShoppingCart 
   {
       public string Color{ get; set; }
       public int ProductId{ get; set; }

       public decimal GetTotal(string cartID)
       {
       }

       // Some other methods ...
   }
}
4

1 に答える 1

5

dsimcha がここの回答で述べているように:

ポリモーフィズムが不要で、値のセマンティクスが必要で、ヒープ割り当てとそれに関連するガベージ コレクションのオーバーヘッドを回避したい場合。ただし、構造体 (任意に大きい) は、クラス参照 (通常は 1 つの機械語) よりも渡すのにコストがかかるため、実際にはクラスの方が高速になる可能性があることに注意してください。

JoshBerke が彼の回答で述べているように、こちら:

参照セマンティクスではなく値セマンティクスが必要な場合は、構造体を使用します。

http://msdn.microsoft.com/en-us/library/ms228593.aspxから

1.7 構造体

クラスと同様に、構造体はデータ メンバーと関数メンバーを含むことができるデータ構造ですが、クラスとは異なり、構造体は値型であり、ヒープ割り当てを必要としません。構造体型の変数は構造体のデータを直接格納しますが、クラス型の変数は動的に割り当てられたオブジェクトへの参照を格納します。構造体型はユーザー指定の継承をサポートせず、すべての構造体型は型オブジェクトから暗黙的に継承します。

構造体は、値のセマンティクスを持つ小さなデータ構造に特に役立ちます。複素数、座標系の点、またはディクショナリのキーと値のペアはすべて、構造体の良い例です。小さなデータ構造にクラスではなく構造体を使用すると、アプリケーションが実行するメモリ割り当ての数に大きな違いが生じる可能性があります。たとえば、次のプログラムは 100 ポイントの配列を作成して初期化します。Point をクラスとして実装すると、101 個の個別のオブジェクトがインスタンス化されます。1 つは配列用、もう 1 つは 100 要素用です。

于 2012-12-22T06:29:33.120 に答える