ゴールから始めるC#-値渡しと参照渡し
メソッドの中にある値は別のメモリを使っているため,「値渡し」では元の変数と別の場所で計算される.
元の変数を変更したい場合は「参照渡し」でその変数を指定しなくてはならない.
値渡し
int a=10;
Add(a); //a=10
private void Add(int a){//仮引数なので他の名前に変更しても良い
a++; //a=10→11
}
aを変更したい場合は戻り値をつけるか,参照渡しにする.
int a=10;
a=Add(a);
private int Add(int a){//仮引数なので他の名前に変更しても良い
a++; //a=10→11
return a;
}
参照渡しでは実引数にも影響.
int a=10;
Add(ref a); //a=10→11
private void Add(ref int r){
r++;//rの参照先を変更します.
}
参照渡しの1種で,呼び出し元での初期化が不要なoutというものがある.
int n,m; //初期化の必要なし
simpleMethod(10,5,out n, out m); //メソッド内で計算された n=15,m=5が返る
private void simpleMethod(int a, int b, out int sum, out int diff){
sum = a+b;
diff = a-b; //必ず値を代入しなくてはならない.
}