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行目のメソッドをデリゲートから削除しています。
-=で削除になります。
関連の記事