デリゲート(delegate)
デリゲート
メソッドを参照するための型。(匿名メソッド?)
あとこれ以外に長いですね。とりあえず基礎から。
delegate void SomeDelegate(int a);
class DelegateTest
{
static void A(int n)
{
Console.WriteLine("A({0})が呼ばれました。", n);
}
static void Main(string[] args)
{
SomeDelegate a = new SomeDelegate(A);
a(256);
}
}
・SomeDelegate a = new SomeDelegate(A); の部分でデリゲート型のaを生成し、
その中に同じ型(今回はvoid ~(int ~)型)を代入することで、その関数を変数のように扱う?ことができる感じがします。
複数のメソッドを代入
■マルチキャストデリゲート
delegate void ShowMessage();
class DelegateTest
{
static void Main()
{
ShowMessage a = new ShowMessage(A);
a += new ShowMessage(B);
a += new ShowMessage(C);
a();
}
static void A() { Console.Write("A が呼ばれました。\n"); }
static void B() { Console.Write("B が呼ばれました。\n"); }
static void C() { Console.Write("C が呼ばれました。\n"); }
}
・a+ = でデリゲート型を加えることが可能。
・a();で加えた分の全ての関数を呼び出せる。
クラスメソッドとインスタンスメソッドを混ぜて、複数のメソッドを代入することもできます。
delegate void ShowMessage();
class Person
{
string name;
public Person(string name) { this.name = name; }
public void ShowName() { Console.WriteLine("名前: {0}", this.name); }
}
class DelegateTest
{
static void Main()
{
Person p1 = new Person("梵天丸");
Person p2 = new Person("伊達正宗");
ShowMessage show = new ShowMessage(p1.ShowName);
show += new ShowMessage(p2.ShowName);
show += new ShowMessage(A) + new ShowMessage(B);
show += new ShowMessage(C);
show();
}
static void A() { Console.Write("A が呼ばれました。\n"); }
static void B() { Console.Write("B が呼ばれました。\n"); }
static void C() { Console.Write("C が呼ばれました。\n"); }
}
結果は梵天丸、伊達正宗、A,B,Cが全部表示されます。
もっとありますが、結構難しくなるみたいなんでいったん止めておきます。また暇なときにでも。
参考URL↓