C#でデリゲートを宣言してインスタンス化する方法をわかりやすく解説
C#のデリゲート(delegate)は、CやC++における関数ポインタに似た仕組みです。デリゲートはメソッドへの参照を保持する参照型の変数であり、この参照は実行時に自由に変更できるのが大きな特徴です。
デリゲートの宣言方法
デリゲートは以下の構文で宣言します。
delegate <戻り値の型> <デリゲート名> <パラメータリスト>
宣言時には、対象となるメソッドと同じ戻り値の型およびパラメータを指定する必要があります。
デリゲートのインスタンス化
デリゲート型を宣言したら、newキーワードを使ってデリゲートオブジェクトを作成し、呼び出したい特定のメソッドと関連付けます。このとき、new式に渡す引数はメソッド呼び出しとよく似た形式で記述しますが、実際のメソッド引数は指定しない点に注意してください。
public delegate void printString(string s);
...
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);
上記の例では、同じprintString型のデリゲートに、画面へ出力するメソッドとファイルへ書き込むメソッドという、異なる処理を持つ2つのメソッドを割り当てています。このようにデリゲートを使うと、同じシグネチャを持つ任意のメソッドを柔軟に差し替えて呼び出せます。
サンプルコード:デリゲートの宣言とインスタンス化
以下は、C#でデリゲートを宣言し、インスタンス化して使用する完全なサンプルです。
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();
}
}
}
実行結果
Value of Num: 35
Value of Num: 175
コードのポイント
- nc1(25)では、デリゲート
nc1が参照しているAddNumメソッドが呼ばれ、numに25が加算されて「35」と表示されます。 - nc2(5)では、同じ
NumberChanger型でありながらMultNumメソッドが呼ばれ、numに5が乗算されて「175」と表示されます。
このように、同一のデリゲート型でも割り当てるメソッドを変えることで、まったく異なる処理を実行できます。これがデリゲートの強力な活用ポイントです。イベント処理やコールバックなど、C#プログラミングのさまざまな場面で応用される重要な概念なので、しっかり理解しておきましょう。
-
Num Lock(ナムロック)キーとは?仕組みと使い方を徹底解説
ほとんどのキーボードにはNum Lock(ナムロック)機能が搭載されています。文字キーの上段に数字キーが並ぶ標準的なキーボードはもちろん、コンパクトなノートPCのキーボードにもNum Lockキーは存在します。キーの表記は「Num Lock」「NumLock」「NumLK」などメーカーによってさまざまですが、基本的な機能はすべて同じです。この記事では、Num Lockキーの仕組み、キーボード上の場所、有効化・無効化の方法、そして実際の使い方まで詳しく解説します。キーボードはメーカーや機種によって構成が異なりますが、ここで紹介する内容はほとんどのデスクトップPCやノートPCに共通して当てはまりま
-
Pythonの変数入門:宣言方法と使い方を徹底解説
本記事では、Pythonにおける変数の作成方法と基本的な使い方について、初心者にもわかりやすく解説します。 Pythonの変数とは 変数(Variable)とは、メモリ上に格納されたオブジェクトへの参照を保存するための「名前が付けられた場所」のことです。プログラムの中でデータを扱う際の基本となる概念です。 Pythonで変数を作成する際には、以下の命名ルールを守る必要があります。 変数名は英字またはアンダースコア(_)で始める必要がある 変数名を数字で始めることはできない 変数名に使用できるのは英数字とアンダースコアのみ(A-z、0-9、_) 変数名は大文字・小文字が区別される(date、D