C# デリゲートのサンプル

C#のデリゲートのサンプルです。

目次

デリゲート

delegate 戻り値の型 名称 (引数)
  • delegeteキーワードを使用します。
  • 戻り値の型と引数を指定します。
  • 戻り値の型と引数が一致しているメソッドは、デリゲートに登録できます。
  • デリゲートに登録したメソッドは、デリゲートの変数を通して実行できます。
  • 以下は、Microsoftのデリゲートのリンクです。
    https://docs.microsoft.com/ja-jp/dotnet/csharp/delegates-overview

デリゲートにインスタンスのメソッドを登録する

デリゲートにインスタンスのメソッドを登録するサンプルです。

using System;

namespace Project1
{
    delegate void delegate1(int num1,int num2);

    class Class1
    {
        public void print1(int a,int b)
        {
            Console.WriteLine(a * b);
        }
    }

    class Test1
    {
        public static void Main()
        {
            Class1 c1 = new Class1();

            delegate1 del1;

            del1 = c1.print1;

            del1(5,2); //10
        }
    }
}

5行目は、デリゲートを定義しています。
21行目は、5行目で宣言したデリゲートの変数を宣言しています。
23行目は、9行目のメソッドをデリゲートに登録しています。
25行目は、デリゲートの変数でメソッドを実行しています。

 

デリゲートに静的メソッドを登録する

デリゲートに静的メソッドを登録するサンプルです。

using System;

namespace Project1
{
    delegate void delegate1(int num1,int num2);

    class Class1
    {
        public static void print1(int a,int b)
        {
            Console.WriteLine(a * b);
        }
    }

    class Test1
    {
        public static void Main()
        {
            delegate1 del1;

            del1 = new delegate1(Class1.print1);

            del1(6,2); //12
        }
    }
}

5行目は、デリゲートを定義しています。
9行目は、静的メソッドです。
19行目は、5行目で宣言したデリゲートの変数を宣言しています。
21行目は、9行目のメソッドをデリゲートに登録しています。
23行目は、デリゲートの変数でメソッドを実行しています。

 

デリゲートに複数のメソッドを登録する/削除する

デリゲートに複数のメソッドを登録する/削除するサンプルです。

using System;

namespace Project1
{
    delegate void delegate1(int num1,int num2);

    class Class1
    {
        public static void print1(int a,int b)
        {
            Console.WriteLine(a * b);
        }
        public static void print2(int a, int b)
        {
            Console.WriteLine(a * b + 200);
        }
    }

    class Test1
    {
        public static void Main()
        {
            delegate1 del1;

            del1 = new delegate1(Class1.print1);
            del1 += new delegate1(Class1.print2);

            del1(6,2); //12 212が表示される

            del1 -= new delegate1(Class1.print1);

            del1(6, 2); //212が表示される
        }
    }
}

25行目は、9行目のメソッドをデリゲートに登録しています。
26行目は、13行目のメソッドをデリゲートに登録しています。
+=で追加登録になります。
28行目は、登録したメソッドが順に実行されます。
30行目は、9行目のメソッドをデリゲートから削除しています。
-=で削除になります。

関連の記事

C# メソッドのサンプル
C# メソッドの値渡しと参照渡しのサンプル

プログラムでつまったらteratailに登録して質問しましょう!↓↓↓

△上に戻る