C#のクラスのメソッドのサンプルです。
目次
サンプル | 値渡し(キーワードなし) |
参照渡し(ref) | |
戻り値を複数にする(out) | |
可変長引数(params) | |
名前付き引数 | |
メソッドの引数のデフォルト値 |
値渡し(キーワードなし)
- 値渡しは、メソッドを呼び出す時に値をコピーして渡します。
→そのためメソッドの中で値が変化しても元の値には影響ありません。 - 値渡しを行うときに何かキーワードを付ける必要はありません。
→メソッドで引数を渡すときのデフォルトは、値渡しです。
using System;
class Test1
{
static void Main()
{
int a = 3;
Calc1(a);
Console.WriteLine(a); //3
}
static void Calc1(int a)
{
a = a * a;
Console.WriteLine(9); //9
}
}
8行目は、メソッドの引数に値渡しを使用しています。
13行目で変数の値が変わっても9行目の値は変わりません。
参照渡し(ref)
- 参照渡しは、メソッドを呼び出す時にアドレスをコピーして渡します。
- そのためメソッドの中で値が変化すると元の値も変更されます。
- 参照渡しを行う時は、refキーワードを追加します。
using System;
class Test1
{
static void Main()
{
int a = 3;
Calc1(ref a);
Console.WriteLine(a); //9
}
static void Calc1(ref int a)
{
a = a * a;
Console.WriteLine(9); //9
}
}
8行目は、メソッドの引数に参照渡しを使用しています。
13行目で変数の値が変わると9行目の値も変わります。
戻り値を複数にする(out)
戻り値を複数にする場合は、outキーワードを指定します。
using System;
class Test1
{
static void Main()
{
Calc1(3, out int r1, out int r2);
Console.WriteLine(r1); //6
Console.WriteLine(r2); //9
}
static void Calc1(int a, out int b, out int c)
{
b = a + a;
c = a * a;
}
}
7行目の引数のr1とr2は、outキーワードがついています。戻り値になります。
11行目も引数のbとcにoutキーワードがついています。
13,14行目は、returnがありませんが、値は呼び出し元に返ります。
可変長引数(params)
可変長引数を使用する場合は、paramsキーワードを指定します。
using System;
class Test1
{
static void Main()
{
Print1("あ"); //あ
Print1("あ","い"); //あい
Print1(); //出力なし
}
static void Print1(params string[] moji)
{
foreach (var a in moji)
{
Console.WriteLine(a);
}
}
}
11行目は、可変長引数のメソッドです。引数のところにparamsがあり、引数のデータ型は配列です。
9行目は、引数がありませんがエラーになりません。
名前付き引数
呼び出し元のメソッドの引数に変数名:値を追加します。
引数の順番に関係なく記述できます。名前付きパラメーターとも呼ばれます。
using System;
class Test1
{
static void Main()
{
var message1 = Print1(num1: 3, name1: "赤");
Console.WriteLine(message1); //色は赤,数は3
}
static string Print1(string name1, int num1)
{
return "色は" + name1 + ",数は" + num1;
}
}
7行目は、名前付き引数です。メソッドの引数の順番が呼び出し元と呼び出し先で異なっていますが名前の指定どうりに値が渡されます。
メソッドの引数のデフォルト値
メソッドの引数を省略してデフォルト値をセットする場合、呼び出し先のメソッドに値をセットします。
using System;
class Test1
{
static void Main()
{
Console.WriteLine(Print("ABC")); //文字列はABC,文字数は3
Console.WriteLine(Print("ABCDE", 5)); //文字列はABCDE,文字数は5
}
static string Print(string name, int num = 3)
{
return "文字列は" + name + ",文字数は" + num;
}
}
13行目の2つ目の引数は「int num = 3」となっています。
呼び出す側の引数が1つの場合、2つ目の引数の値はこの3になります。デフォルト値を意味します。
10行目のように引数が2つある場合は、その値の引数になります。
関連の記事