C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
メソッドの宣言
2021/3/14
目次
値を返さないメソッド
public void DoSomething()
{
System.Diagnostics.Debug.WriteLine("DoSomethingを実行します。");
}
値を返すメソッド
public int DoSomething()
{
return 627;
}
1つの引数をとるメソッド
public void DoSomething(string arg1)
{
System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} です。");
}
2つの引数をとるメソッド
public void DoSomething(string arg1, int arg2)
{
System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} と {arg2} です。");
}
引数の違う同じ名前の複数のメソッドの宣言(オーバーロード)
public void SameName()
{
//内容省略
}
public void SameName(string arg1)
{
//内容省略
}
public void SameName(int arg1)
{
//内容省略
}
メモ:型違いのいろいろな引数に対応する必要がある場合は、型パラメーター(ジェネリック)の使用も検討します。
不特定の数の引数をとるメソッド
public void DoSomething(params int[] args)
{
System.Diagnostics.Debug.WriteLine($"受け取った引数の数は {args.Length} 個です。");
foreach (int arg in args)
{
System.Diagnostics.Debug.WriteLine(arg.ToString());
}
}
静的メソッド
public static void DoSomething()
{
System.Diagnostics.Debug.WriteLine("DoSomethingを実行します。");
}
省略可能引数
public void DoSomething(int arg1, int arg2 = 0)
{
System.Diagnostics.Debug.WriteLine("DoSomethingを実行します。");
}
メモ:省略可能な引数に値が渡されたかどうか直接確認する方法はありません。多くの場合既定値にありえない値を設定しておくことで区別できるようにします。
1つの型パラメーターをとるメソッド(ジェネリック)
public void DoSomething<T>(T arg1)
{
System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} です。型は {typeof(T).FullName} です。");
}
2つの型パラメーターをとるメソッド(ジェネリック)
public T2 DoSomething<T1, T2>(T1 arg1)
{
System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} です。");
return default(T2);
}
抽象メソッド(純粋仮想関数)
public abstract long DoSomething(string arg1);
メモ:抽象メソッドは抽象クラス(abstractで宣言されたクラス)内でのみ宣言できます。
メモ:仮想関数はキーワード virtual で宣言できます。
参照渡しの引数
public void DoSomething(ref string arg1)
{
System.Diagnostics.Debug.WriteLine($"受け取った引数は {arg1} です。");
arg1 = "引数の値を書き換えます。"; //参照渡しなので呼び出し元に影響します。
}
メモ:参照渡しは計画的にご利用ください。
メモ:状況が限定できる場合は ref の代わりに in または out も使用できます。 → メソッドのパラメーター - C# リファレンス | Microsoft Docs
呼び出し例
string x = "ABC";
DoSomething(ref x);
名前のない複数の戻り値
public (int, string) DoSomething()
{
return (627, "徳川家康")
}
呼び出し例
var result = DoSomething();
System.Diagnostics.Debug.WriteLine(result.Item1); //627 と出力されます。
System.Diagnostics.Debug.WriteLine(result.Item2); //徳川家康 と出力されます。
名前付きの複数の戻り値
public (int TotalCount, string CaptainName) DoSomething()
{
return (627, "徳川家康")
}
呼び出し例
var result = DoSomething();
System.Diagnostics.Debug.WriteLine(result.TotalCount); //627 と出力されます。
System.Diagnostics.Debug.WriteLine(result.CaptainName); //徳川家康 と出力されます。
非同期実行されるメソッド
public async void AsyncDoSomething()
{
await System.Threading.Tasks.Task.Run(() =>
{
System.Diagnostics.Debug.WriteLine("ここに記述した処理は呼び出し元とは非同期で実行されます。");
});
}
コルーチン
public System.Collections.Generic.IEnumerable<int> GetNumbers()
{
yield return 6;
yield return 2;
yield return 7;
}
呼び出し例
foreach (int number in GetNumbers())
{
System.Diagnostics.Debug.WriteLine(number);
}
「6」「2」「7」と3行出力されます。→ Debug.WriteLineが表示される場所
参考
式形式のメソッド
public int Add(int x, int y) => x + y;
ラムダ式によるローカルの関数
Func<int, int, int> add = (int x ,int y) => x + y;
System.Diagnostics.Debug.WriteLine(Add(2, 3)); //5 と出力されます。
System.Diagnostics.Debug.WriteLine(Add(8, 10)); //18 と出力されます。
複数行の処理を記述することもできます。
Func<string, string> trimNull (string value) =>
{
if (value == null)
{
return "";
}
return value;
}
System.Diagnostics.Debug.WriteLine(trimNull("Hello")); //Hello と出力されます。
ローカル関数
public void Test()
{
int add (int x, int y)
{
return x + y;
}
System.Diagnostics.Debug.WriteLine(add(12, 34)); //46 と出力されます。
}