0

値型と参照型の一般的な違いを知っています。また、参照型で値型を使用する場合、この値型は実際にはヒープ上にあることも知っています。

元:

class ClassA{
   public DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
}

いつ

ClassA a = new ClassA();

date1 はヒープ上にあります

私の質問は

この date1 をメソッドのパラメーターとして使用すると、メモリ位置の動作はどうなりますか?

public void methodA(DateTime dt)
{
//do sth with the dt
}

メソッドを呼び出す

methodA(new ClassA().date1);

オプション 1: 1 つの date1 参照をコピーするだけ オプション 2: または date1 データをコピーして実行する

更新:「値型に関する真実」を読んだ後、私の仮定には不確実性があることに気付きました。少なくとも、次のようなコンテキストを提供する必要があります。「デスクトップ CLR 上の C# の Microsoft 実装では、値がラムダまたは匿名メソッドの閉じたローカル変数ではないローカル変数または一時であり、メソッド本体がそうでない場合、値の型はスタックに格納されます。イテレータ ブロックであり、ジッターは値を登録しないことを選択します。」

Update2 : これについて質問した理由は、http: //marcgravell.blogspot.co.uk/2011/10/assault-by-gc.htmlのコード スニペットを理解したいからです。

Customer をクラスから構造体に変更します (このクレイジーなコード内のみ)

メイン ストアをリストから顧客に変更する[]

サブセットを List から List に変更します。具体的には、オフセットをメインの Customer[] に変更します。

void SomethingComplex(ref Customer customer) {...}
...
int custIndex = ...
SomethingComplex(ref customers[custIndex]);
4

1 に答える 1

1

DateTimeは値型であるため、値はメソッド呼び出し時にコピーされます。

于 2012-04-05T09:58:40.150 に答える