この章では配列をメソッドに渡す方法について説明します。
では例をみてみましょう。 配列をメソッドに渡すにはという形式で書きます。
この例ではnumber配列をmaxメソッドに渡すのでと書きます。
配列を渡したら、メソッドの仮引数ではのように配列で受け取ります。
maxメソッドの機能は受け取った配列の要素の中で一番大きい数の添え字を返します。
for文の中のifで以下のような順番で大きさを比べています。 そして最後に以下の箇所で出力されます。 number[world1]のworld1には一番大きい配列のインデックス番号が入っているので、となり89が出力されます。
次の例では配列の要素をメソッドに渡して、その配列の値をメソッド内で変更した時に元の配列はどうなるのかについて説明します。 配列は値渡し(変数をメソッドに渡すことを値渡しと言います)ではなく、参照渡しという方法で渡されます。
参照渡しと言いましても特別なことをするわけではなく、配列をメソッドに渡すだけです。
参照渡しでメソッドに配列を渡して、メソッド側でその配列のデータを書き換えると元の配列のデータまでが書き換わります。
普通の変数を値渡しでメソッドに送ってもメソッド側で書き換えることは出来ません。
例では配列の要素であるがkakikaeメソッドのの箇所ですべて4に変えていますが、このようにメソッド側で配列の値を変えることで、呼び出し元の配列の要素も4に変更されます。
結果は以下の通りです。
次の例で呼び出し元の変数を値渡しで渡して、メソッド側でその変数の値を書き換えることができるのか見てみましょう。 では説明を始めます。
int x = 99;
int y = 90;
をkakikae (x, y) ;の箇所でkakikaeメソッドに送っています。 そして、kakikaeメソッドでは 以下のように4を代入しています。
a=4;
b=4;
ここで変数に4を代入しても、 呼び出し元のint x 、int y の値は変更されずにそれぞれ 99、90のままです。
つまり呼び出し元から渡した変数の値をメソッド内で変更しても呼び出し元の変数の値は変化しません。
これが値渡しです。
しかし、値渡しを参照渡しに変更する方法がC#には備わっています。
実引数と仮引数に以下の例のように「ref」と言うキーワードを付けます。
では例をみてみましょう。 実引数と仮引数に「ref」を付けるとkakikaeメソッド 内で変数 a,bに値を代入した場合、 Mainメソッド内の変数x,yの値も書き換わります(スペースの都合でkakikaeメソッドの引数を2行で書いていますが1行で書いてもいいです)。
結果は以下の通りです。
refの付いた変数を渡す場合はその変数には何かしらの値が入っていないといけません。
しかし、値の入っていない変数をメソッドに渡したい場合はrefの代わりにoutを使用してください。outもrefと同じで参照渡しです。 結果は以下の通りです。