無能学生の作業ログ

せっかく新しいことやっても作業ログがないと身にならないので.

ゴールから始める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; //必ず値を代入しなくてはならない.
}