C#のデリゲート型変数には、メソッドを代入することができます。そして、そのメソッドを好きなタイミングで呼び出すことができます。
デリゲート型(変数ではなく「型」)を新しく作るには以下のように記述します。
delegate void LineParseFunc(string line);
メソッドを記述するときと似ていますが、次の点が異なります。
上記のデリゲート型「LineParseFunc」を宣言したのち、次のように変数を定義します。この「parse」には、string型の変数を1つだけ引数に持つ、void型のメソッドを代入できます。
// ↓クラスのフィールドや、メソッド内のローカル変数として定義
LineParseFunc parse=ParseLine;
// ↓どこかに定義されている。
void ParseLine(string line)
{
// lineに何らかの処理を施す。
}
以下、使用例です。
public partial class MainForm : Form
{
void ParseLine(string line) // ★
{
// lineに何らかの処理を施す。
}
void button1_Clicked()
{
TextParser textParser=new TextParser();
// ↓2つ目の実引数ParseLineは★のメソッド
testParser.Parse(textBox1.Text,ParseLine);
}
// 他のメンバーは省略
}
public class TextParser
{
public delegate void LineParseFunc(string line);
// ↓2つ目の仮引数にメソッドが代入される。
public void Parse(string[] text,LineParseFunc parse)
{
// サンプルでもエラーチェックは忘れずに!
if(text==null || parse==null)
throw new ArgumentNullException;
for(int i=0; i<text.Length; i++)
parse(text[i]); // 代入したメソッドの呼び出し
}
}