値型と参照型の一般的な違いを知っています。また、参照型で値型を使用する場合、この値型は実際にはヒープ上にあることも知っています。
元:
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]);