delegate 3. MulticastDelegate
멀티캐스트 대리자
함수 실행1
using System;
namespace delegate_test3
{
class Program
{
static void Main(string[] args)
{
Program program = new Program();
program.run("실행1");
program.SomethingHappend("실행2");
program.MyAreaClick("실행3");
program.AfterClick("실행4");
}
void run(string sender)
{
Console.WriteLine(sender + " run 클릭!");
}
void SomethingHappend(string sender)
{
Console.WriteLine(sender + " SomethingHappend 클릭!");
}
void MyAreaClick(string sender)
{
Console.WriteLine(sender + " MyArea 클릭!");
}
void AfterClick(string sender)
{
Console.WriteLine(sender + " AfterClick 클릭!");
}
}
}
함수실행1 - 대리자 멀티캐스트
함수가 대리자와 동일한 형태의 시그니처를 가진다면, 여러 함수를 대리자 변수 1개에 묶을 수 있다.
대리자로 묶어놓은 함수들은, 대리자의 실행으로 여러 함수 실행이 가능하다.
using System;
namespace delegate_test3
{
delegate void Del(string sender);
class Program
{
static void Main(string[] args)
{
Program program = new Program();
// 대리자 묶음
Del Multi_Delegate = new Del(program.run);
Multi_Delegate += program.SomethingHappend;
Multi_Delegate += program.MyAreaClick;
Multi_Delegate += program.AfterClick;
// 대리자 실행
Multi_Delegate("대리자");
}
void run(string sender)
{
Console.WriteLine(sender + " run 클릭!");
}
void SomethingHappend(string sender)
{
Console.WriteLine(sender + " SomethingHappend 클릭!");
}
void MyAreaClick(string sender)
{
Console.WriteLine(sender + " MyArea 클릭!");
}
void AfterClick(string sender)
{
Console.WriteLine(sender + " AfterClick 클릭!");
}
}
}
함수 실행2
using System;
namespace delegate_test3
{
class Buttons
{
private string title;
public Buttons(string name)
{
this.title = name;
}
public void run(string run_msg)
{
Console.WriteLine(title + run_msg + " 실행!");
}
}
class Program
{
static void Main(string[] args)
{
Buttons Button1 = new Buttons("버튼1");
Buttons Button2 = new Buttons("버튼2");
Buttons Button3 = new Buttons("버튼3");
Buttons Button4 = new Buttons("버튼4");
Button1.run(" run");
Button2.run(" SomethingHappend");
Button3.run(" MyArea");
Button4.run(" AfterClick");
}
}
}
using System;
namespace delegate_test3
{
delegate void Btn(string sender);
class Buttons
{
private string title;
public Buttons(string name)
{
this.title = name;
}
public void run(string run_msg)
{
Console.WriteLine(title + run_msg + " 실행!");
}
}
class Program
{
static void Main(string[] args)
{
Buttons Button1 = new Buttons("버튼1");
Buttons Button2 = new Buttons("버튼2");
Buttons Button3 = new Buttons("버튼3");
Buttons Button4 = new Buttons("버튼4");
Btn click = new Btn(Button1.run);
click += Button2.run;
click += Button3.run;
click += Button4.run;
// 대리자 click 만 실행하면,
// Button1, Button2, Button3, Button4 의 run 을 모두 동작하게 한다.
click("클릭");
}
}
}