はじめに
プログラミング言語 【C#『シーシャープ』】 を使用して
プログラムを最初から学習するための記載。
前回:ゼロから始めるプログラム学習(C#)_005
https://qiita.com/nekoozi/items/5c49ee31f6e999738634
デリゲートとラムダ式
1・・・ デリゲートを使わない場合
通常、関数(メソッド)は直接呼び出して使います。
通常のメソッド
public void Greet()
{
Console.WriteLine("Hello!");
}
// 呼び出し
Greet(); // 出力: Hello!
2・・・ デリゲートを使う場合
デリゲートを使うと、「関数を代入できる変数」として扱うことができます。ここでは、アクセス範囲を限定するために 修飾子 private を使用します。
デリゲートを使った例
// デリゲートの定義
private delegate void Printer(string s);
// メソッド
private void PrintMessage(string msg)
{
Console.WriteLine(msg);
}
// デリゲートを使用
public void Execute()
{
Printer printer = PrintMessage;
printer("Hello!");
}
// 戻り値の型 デリゲート名(関数が引き受ける仮引数);
private delegate void Printer(string s);
/** このデリゲート Printer は、1つの文字列を受け取り、
処理を行うが、結果として何も値を返さない関数
void: デリゲートが参照するメソッドの戻り値の型
(ここでは「何も値を返さない」)。
delegate: デリゲートを宣言するためのキーワード。
(string s): デリゲートが参照するメソッドが
受け取る引数の型 と名前 s(任意で設定が必要、
実際のメソッドでこの名前を使用する必要はありません)。
**/
private void PrintMessage(string msg)
{
Console.WriteLine(msg);
}
/** このメソッドは string msg という文字列を受け取り、
その文字列をコンソールに出力します。
**/
public void Execute()
{
/** Printer型の変数printerを作成し、
メソッドPrintMessageを登録します。
**/
Printer printer = PrintMessage;
// デリゲートを使用してメソッドを呼び出します。
printer("Hello!"); // 出力: Hello!
}
3・・・ 匿名メソッドを使用する場合
匿名メソッドは、名前を持たないメソッドを定義し、デリゲート型の変数に直接処理ロジックを記述できる機能です。
匿名メソッド
Printer printer = delegate (string msg)
左側がデリゲート型の変数 printer で
イコールを挟んだ右側が処理ロジックの記述
// デリゲートの定義
private delegate void Printer(string s);
// 匿名メソッドを使用
public void ExecuteWithAnonymousMethod()
{
Printer printer = delegate (string msg)
{
Console.WriteLine(msg);
};
printer("Hello!"); // 出力: Hello!
}
4・・・ ラムダ式を使用する場合
匿名メソッドをさらに簡潔に記述する方法がラムダ式です。
ラムダ式
Printer printer = (msg) => Console.WriteLine(msg);
左側がデリゲート型の変数 printer で
右側の (msg) は デリゲートが受け取る引数を指定します。
さらに アロー演算子 (=>) の右側へ処理ロジックの記述
// デリゲートの定義
private delegate void Printer(string s);
// ラムダ式を使用
public void ExecuteWithLambda()
{
// 引数が一つの場合は()を省略可能。
Printer printer = msg => Console.WriteLine(msg);
// デリゲートでメソッドを実行
printer("Hello!"); // 出力: Hello!
}
次回:ゼロから始めるプログラム学習(C#)_007
https://qiita.com/nekoozi/items/c07643603fd0cc92ca53
参考文献
C#関連情報サイト様