そもそもデリゲートとは?
デリゲートを使うと、引数や戻り値にメソッドを与えたり、簡単にインスタンス化することができます。
これまでは...
public static void SayHello(string name)
{
Console.WriteLine($"こんにちは、{name}さん。");
}
public static void main()
{
SayHello sayHello = new SayHello("太郎");
}
のようにして引数に、変数を格納していたが、デリゲートを使うと、
1.簡単なインスタンス化
public delegate void DeligateHello(string name);
public static void Greet(string name)
{
Console.WriteLine($"こんにちは、{name}さん。"); //①
}
public static void Main()
{
DeligateHello del = Greet;
del("太郎"); //①を実行
}
2.メソッドを引数に渡す方法
public deligate void DeligateHello(string name);
public static void Greet(string name)
{
Console.WriteLine($"こんにちは、{name}さん。"); //①
}
public static void Execute(DeligateHello del, string name)
{
del(name);
}
public static void Main()
{
DeligateHello del = Greet;
Execute(del, "太郎");
}
Point!
・まずは、デリゲートの定義(シグネチャ型)
ex) public void deligate Deli(string message);
・参照したいメソッドをインスタンス化
ex) Deli del = ShowMessage; ← ShowMessageメソッドをインスタンス化
・呼び出したい引数にデリゲートを渡す
*デリゲートを引数に渡したメソッド内で、デリゲートを通して参照元のメソッドを呼び出すことでマップできる