C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の匿名メソッドとは?基本の仕組みと使い方を実例付きで解説

匿名メソッド(Anonymous Method)とは、その名の通り「名前を持たないメソッド」のことです。C#では、コードブロックをデリゲートのパラメータとして直接渡すための手法として利用されます。

通常のメソッドのように事前に宣言して名前を付ける必要がなく、デリゲートインスタンスを作成するタイミングで、delegateキーワードを使ってその場で定義できるのが大きな特徴です。処理が短く、他の場所から再利用する必要がない場合に特に便利です。

匿名メソッドの基本的な書き方

匿名メソッドは、デリゲート型の変数にdelegateキーワードを用いて代入することで宣言します。以下のような形式になります。

delegate(引数) {
    // 処理内容
};

サンプルコード

次の例では、まず匿名メソッドでデリゲートを生成して呼び出し、その後、名前付きメソッドでも同じデリゲートを呼び出しています。両者の違いを比較してみましょう。

using System;
delegate void Demo(int n);
namespace DelegateAppl {
    class TestDelegate {
        static int num = 50;
        public static void AddNum(int p) {
            num += p;
            Console.WriteLine("Named Method: {0}", num);
        }
        public static void MultNum(int q) {
            num *= q;
            Console.WriteLine("Named Method: {0}", num);
        }
        public static int getNum() {
            return num;
        }
        static void Main(string[] args) {
            // 匿名メソッドを使ってデリゲートインスタンスを作成
            Demo d = delegate(int x) {
                Console.WriteLine("Anonymous Method: {0}", x);
            };
            // 匿名メソッド経由でデリゲートを呼び出し
            d(100);
            // 名前付きメソッドでデリゲートをインスタンス化
            d = new Demo(AddNum);
            // 名前付きメソッド経由でデリゲートを呼び出し
            d(5);
            // 別の名前付きメソッドでデリゲートをインスタンス化
            d = new Demo(MultNum);
            // 名前付きメソッド経由でデリゲートを呼び出し
            d(2);
            Console.ReadKey();
        }
    }
}

実行結果

Anonymous Method: 100
Named Method: 55
Named Method: 110

コードのポイント解説

上記のプログラムにおける匿名メソッドの部分は、以下のコードです。

Demo d = delegate(int x) {
    Console.WriteLine("Anonymous Method: {0}", x);
};

このコードでは、int型の引数xを受け取り、コンソールに値を出力するだけの処理を、名前を付けずにその場で定義しています。d(100);と呼び出すことで、「Anonymous Method: 100」と表示されます。

その後、同じ変数dに名前付きメソッドAddNumMultNumを代入し直すことで、デリゲートの中身を差し替えて再利用している点にも注目してください。このように、匿名メソッドは一時的な処理を簡潔に記述でき、名前付きメソッドと柔軟に組み合わせて使うことができます。

まとめ

  • 匿名メソッドは名前を持たないメソッドであり、コードブロックをデリゲートに渡すために使われる
  • delegateキーワードを使い、デリゲートインスタンスの作成時にその場で定義する
  • 短い一時的な処理や、イベントハンドラなどでの簡潔な記述に適している
  1. Javaのクラスメソッド(静的メソッド)とは?基本から使い方まで解説

    Javaにおけるクラスメソッド(静的メソッド)とは、特定のオブジェクトのインスタンスではなく、クラスそのものに対して呼び出されるメソッドのことです。static修飾子を付けることで、すべてのクラスインスタンス間で同じ実装が保証されます。静的メソッドはインスタンス化せずに呼び出すことができるため、アクセスできるのはクラス内の他の静的メンバー(staticなフィールドやメソッド)のみです。インスタンス変数や非staticメソッドには直接アクセスできない点に注意しましょう。Javaの標準ライブラリにも多くの静的メソッドが用意されています。代表的な例としては、Math.random()、System.

  2. Pythonの静的メソッド(@staticmethod)とは?仕組みと使い方を解説

    Pythonのクラスには、インスタンスメソッド、クラスメソッド、静的メソッド(スタティックメソッド)という3種類のメソッドを定義できます。それぞれ役割や呼び出し方が異なり、適切に使い分けることでコードの可読性と保守性が向上します。3種類のメソッドの違いインスタンスメソッド: 第1引数に self を受け取り、オブジェクト(インスタンス)の状態にアクセス・変更できます。クラスメソッド: @classmethod デコレータを付け、第1引数に cls を受け取り、クラス自体の状態にアクセスできます。静的メソッド: @staticmethod デコレータを付け、self も cls も受け取りません