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

C#でデリゲートをインスタンス化する方法を徹底解説

C# においてデリゲート(delegate)をインスタンス化するには、new キーワードを使用します。デリゲートを作成する際、new 式に渡す引数はメソッド呼び出しとよく似た形式で記述しますが、メソッドに渡す実引数は指定しない点に注意してください。

例えば、次のように記述します。

public delegate void printString(string s);
printString ps1 = new printString(WriteToScreen);

匿名メソッドによるデリゲートのインスタンス化

new キーワードだけでなく、匿名メソッドを使ってデリゲートをインスタンス化することもできます。処理内容が短い場合や、専用のメソッドを別途定義したくない場合に便利です。

// デリゲートを宣言
delegate void Del(string str);

Del d = delegate(string name) {
    Console.WriteLine("Notification received for: {0}", name);
};

デリゲートの宣言とインスタンス化のサンプルコード

それでは、デリゲートを宣言し、実際にインスタンス化して使用する完全なサンプルを見てみましょう。

Example

using System;

delegate int NumberChanger(int n);
namespace DelegateAppl {

    class TestDelegate {

        static int num = 10;
        public static int AddNum(int p) {
            num += p;
            return num;
        }
        public static int MultNum(int q) {
            num *= q;
            return num;
        }
        public static int getNum() {
            return num;
        }
        static void Main(string[] args) {
            // デリゲートインスタンスを作成
            NumberChanger nc1 = new NumberChanger(AddNum);
            NumberChanger nc2 = new NumberChanger(MultNum);

            // デリゲートオブジェクト経由でメソッドを呼び出す
            nc1(25);
            Console.WriteLine("Value of Num: {0}", getNum());
            nc2(5);
            Console.WriteLine("Value of Num: {0}", getNum());
            Console.ReadKey();
        }
    }
}

Output(実行結果)

Value of Num: 35
Value of Num: 175

コードの解説

このサンプルでは、int 型の引数を受け取り int 型の値を返す NumberChanger デリゲートを宣言しています。

  • nc1 には AddNum メソッドへの参照を格納し、nc1(25) を呼び出すことで num に 25 が加算され、35 が出力されます。
  • nc2 には MultNum メソッドへの参照を格納し、nc2(5) を呼び出すことで num に 5 が乗算され、175 が出力されます。

このように、同じデリゲート型でも代入するメソッドが異なれば、まったく違う処理を実行できます。これがデリゲートの大きな特徴です。

補足:C# 2.0 以降の簡略記法

C# 2.0 以降では、new キーワードを省略し、メソッド名を直接代入する「メソッドグループ変換」が利用できます。

NumberChanger nc1 = AddNum;   // new NumberChanger(AddNum) と同等

また、C# 3.0 以降ではラムダ式を使うことで、さらに簡潔にデリゲートを生成することも可能です。状況に応じて使い分けると、より読みやすいコードになります。

  1. Windows 10で起動時にNum Lock(テンキーロック)を自動的に有効にする方法

    Windows 10で起動時にNum Lockが有効にならない原因とは? Microsoft Windowsでは、起動や再起動のたびにNum Lock(テンキーロック)が自動的に有効にならないという問題が、多くのユーザーから報告されています。この問題はWindows 10特有のものではなく、以前のバージョンのWindowsでも同様の症状が確認されていました。PCを起動するたびに毎回手動でNum Lockをオンにしなければならないのは、非常に煩わしい作業です。 幸い、この問題にはいくつかの効果的な解決策があります。本記事ではその具体的な対処法をご紹介します。まずは、この問題の主な原因から理解して

  2. Windows 10でNum Lockを有効・無効にする5つの方法【レジストリ・PowerShell・BIOS対応】

    パソコンの起動時にキーボードのNum Lock(テンキーロック)を自動的にオンにしたいと考えているWindowsユーザーは少なくありません。そのためには、ノートパソコンでNum Lockを有効にする方法を知っておくことが重要です。コントロールパネルやレジストリエディターを活用することで、Windows 10でNum Lock機能を簡単に有効化できます。一方で、起動時はNum Lockをオフにしておきたいというユーザーもいます。レジストリ設定やPowerShellのオプションを変更することで、システム起動時のNum Lockの状態を自由に制御できます。ただし、レジストリの編集は慎重に行う必要があ