C#のジェネリックデリゲートとは?宣言方法とサンプルコードを解説
ジェネリックデリゲートとは
ジェネリックデリゲートとは、型パラメータを持つデリゲートのことです。通常のデリゲートは扱うデータ型が固定されるため、型ごとに別々の宣言が必要になりますが、ジェネリックデリゲートなら1つの宣言でさまざまな型に対応でき、コードの再利用性が大幅に向上します。
さらに、C#では Func<T, TResult>、Action<T>、Predicate<T> などの汎用的なデリゲートが System名前空間 にあらかじめ用意されているため、これらを活用すれば独自のデリゲート宣言を記述する手間そのものを省くことも可能です。
ジェネリックデリゲートの宣言方法
ジェネリックデリゲートは、型パラメータを付けて次のように宣言します。
delegate T myDelegete<T>(T n);
この例では、型パラメータ T を持つデリゲート myDelegete を宣言しています。このデリゲートは T 型の引数を1つ受け取り、T 型の値を返します。
C#でのジェネリックデリゲートの使用例
以下は、C#でジェネリックデリゲートを作成して使用する例です。
using System;
delegate T myDelegete<T>(T n);
namespace GenericDelegateAppl {
class TestDelegate {
static int num = 5;
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) {
// デリゲートインスタンスを作成
myDelegete<int> nc1 = new myDelegete<int>(AddNum);
myDelegete<int> nc2 = new myDelegete<int>(MultNum);
// デリゲートオブジェクト経由でメソッドを呼び出す
nc1(50);
Console.WriteLine("num の値: {0}", getNum());
nc2(10);
Console.WriteLine("num の値: {0}", getNum());
Console.ReadKey();
}
}
}実行結果
num の値: 55 num の値: 550
コードのポイント
このプログラムでは、int 型を扱うジェネリックデリゲート myDelegete<int> のインスタンスを2つ生成しています。nc1 には加算を行う AddNum メソッド、nc2 には乗算を行う MultNum メソッドをそれぞれ割り当てています。
最初に nc1(50) を呼び出すと、初期値 5 に 50 が加算されて 55 になります。続いて nc2(10) を呼び出すと、55 に 10 が掛けられて 550 となります。
まとめ
ジェネリックデリゲートを使えば、型に縛られない柔軟なデリゲートを1つの宣言で定義できます。標準の Func や Action などのジェネリックデリゲートを組み合わせれば、宣言の手間を減らしながら、簡潔で保守性の高いコードを実現できます。
-
C#でデリゲートを宣言してインスタンス化する方法をわかりやすく解説
C#のデリゲート(delegate)は、CやC++における関数ポインタに似た仕組みです。デリゲートはメソッドへの参照を保持する参照型の変数であり、この参照は実行時に自由に変更できるのが大きな特徴です。デリゲートの宣言方法デリゲートは以下の構文で宣言します。delegate <戻り値の型> <デリゲート名> <パラメータリスト>宣言時には、対象となるメソッドと同じ戻り値の型およびパラメータを指定する必要があります。デリゲートのインスタンス化デリゲート型を宣言したら、newキーワードを使ってデリゲートオブジェクトを作成し、呼び出したい特定のメソッドと関連付けます
-
C#のデリゲートとは?仕組みと基本的な使い方をわかりやすく解説
C#におけるデリゲート(delegate)とは、メソッドへの参照を保持できる特殊な型です。デリゲート変数には特定のメソッドへの参照が格納され、その参照先はプログラムの実行時に動的に変更することも可能です。この特性を活かすことで、同じデリゲート変数を使いながら、状況に応じて異なるメソッドを呼び出す柔軟な設計が実現できます。デリゲートの主な用途デリゲートは、次のような場面で特に役立ちます。イベント処理の実装:ボタンクリックなどのイベント発生時に、登録されたメソッドを呼び出す仕組みとして利用されます。コールバックメソッド:非同期処理の完了時など、後から指定したメソッドを呼び出したい場合に使用されます