Asp.Net進級/値タイプと参照タイプ:復習

1395 ワード

値タイプとは?
値タイプ:非クラスタイプ、委任タイプ、インタフェースタイプ、stringタイプのタイプを値タイプと呼びます.
リファレンスタイプタイプ:クラスタイプ、委任タイプ、インタフェースタイプ、stringタイプをリファレンスタイプと呼びます.
 
値タイプと参照タイプの付与問題...
値タイプの割当て:値タイプ間の割当ては、コピーを作成し、2つの完全に独立した変数に1つの値を格納します.
int x=10;
int y=x;
y=20;
Console.WriteLine(x+"\t"+y)

出力結果:10 20
値タイプ間の付与は、コピーの作成が参照ではないため、付与後の別の変数に値を変更しても他の変数には影響しません.これが値タイプです.
 
参照タイプの割当て:参照タイプの割当て時に同じオブジェクトを参照します.つまり、2つの参照タイプ変数が同じオブジェクトを参照し、いずれかの変数を操作すると、別のオブジェクトに影響します.
var listTwo=listOne;
listTwo.Add(6);
listTwo.ForEach(x=>Console.Write(x+"\t"));
Console.WriteLine();
listOne.ForEach(y=>Console.Write(y+"\t"));

出力結果:
2 3 4 5 62 3 4 5 6
参照タイプ変数間の割り当ては、自身が参照しているオブジェクトを別の変数参照に渡すため、同じオブジェクトを参照します.すなわち、同じオブジェクトの場合、メモリ内のオブジェクトのアドレスが2つのオブジェクトによって参照されると、同じオブジェクトが参照されます.
変数の1つに別のオブジェクトを参照させて変更すると、参照されたオブジェクトが変更されたため、間に割り当てられたオブジェクトには影響しません.(スタック内の変数のアドレスは、メソッドパラメータリストでrefキーワードによってタイプ変数が宣言されない限り、変数のアドレスが同じではない)
宣言:値タイプ変数も参照タイプ変数もスタックにメモリを割り当てます.
インスタンス/オブジェクトの作成は、スタックメモリに作成されます.リファレンスタイプ変数が実装できるリファレンスインスタンスは、リファレンスタイプ変数がメモリ内のオブジェクトのアドレスを格納してリファレンスを形成するためである.
注意:値タイプ変数スタックにどれだけのメモリを割り当てるかは、宣言した変数のタイプによって決まります.int 32ビットはスタックに4バイトのメモリを割り当てます.
参照タイプ変数が宣言されると、システムは、スタック内のオブジェクトのアドレスを格納するために、スタックに4バイトのメモリを直接割り当てます.