<outについて>
  • outで修飾された引数値の内容は参照渡しされる(関数を出た後も値が変更されたままになる)
  • 渡された参照は関数内で必ず変更する必要がある
  • 引数は初期化されていなくても良い

<refについて>
  • refで修飾された引数値の内容は参照渡しされる(関数を出た後も値が変更されたままになる)
  • 引数は初期化されている必要がある

配列に関しても同様に、refやoutは使用可能だが基本的に配列は参照渡しなので引数が初期化されているか否か関数内で変更する義務があるか無いか、が関係してくる
outとrefは関数側とクライアントコードの呼び出し両方の引数に修飾しておく必要がある

class RefOuttest
   {
       static void MethodOut(out int i)
       {
           i = 24;  //変更の義務あり
       }
        static void MethodRef(ref int i)
       {
           i = 64;  //変更の義務無し
       }

       public RefOuttest()
       {
           int i;
           MethodOut(out i);  //引数の初期化は必要ない
           int j=0;
           MethodRef(ref j);  //引数の初期化が必要
           Console.WriteLine(i+"  :  "+j);
       }
   }
最終更新:2012年06月01日 00:37