C#のDelegateについて
簡単にいうと関数を代入できる変数を定義して使うこと
code:C#
class Program
{
// まず、delegate型の変数を宣言します。
// hogeという文字列を標準出力に表示するので、戻り値もなし(void)で、
// Delegateの引数もありません
public delegate void Delegate(); // (1)
static void Main(string[] args)
{
// hogeという変数を(1)で定義したDelegate型で定義します。
// そして、このhogeに、(2)で定義したHogeという関数を代入します。
// これがDelegateです。
Delegate hoge = Hoge;
// 先程の変数を以下のように実行します。
// 変数を実行するというのも変ですが、この変数にはHogeという
// 関数が代入されているので、Hogeという関数が実行されます。
hoge();
Console.ReadLine();
}
static void Hoge() { // (2)
Console.WriteLine("hoge");
}
}
引数ありver
code:C#
class Program
{
// 先ほどと同様Delegate型の変数を宣言します。関数の引数には、
// 長さをカウントしたい対象の文字列、戻り値には文字列の長さを返しますので、
// 引数はstring、戻り値はint型にします。なので、定義は以下のようになります。
public delegate int Delegate(string s); // (1)
static void Main(string[] args)
{
// (1)で定義したDelegate型の変数countStringを定義します。
// そして、変数countStirngに、(2)で定義した関数countStringを代入します。
Delegate countString = CountString;
// 変数countStringを実行すると、関数CountStringが実行されて、
// hogeの文字列の長さが表示されます。
Console.WriteLine(countString("hoge"));
Console.ReadLine();
}
static int CountString(string s) // (2)
{
return s.Length;
}
}