0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゼロから始めるプログラム学習(C#)_006

Last updated at Posted at 2024-12-03

はじめに

プログラミング言語  【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#関連情報サイト様

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?