首先看一個例子,一名律師代表三名員工向老闆讨薪
員工将讨薪方法委托為律師
涉及到三個對象:員工,老闆,律師
/// <summary>
/// 員工
/// </summary>
class Employee {
public string name;
public int money;
public Employee() { }
public Employee(string name, int money) {
this.name = name;
this.money = money;
}
/// <summary>
/// 員工有讨薪的權利,也就是有這個方法
/// </summary>
public void GetMoney(Boss b) {
Console.WriteLine("我是{0},{1}還我血汗錢{2}",name,b.name,money);
}
}
/// <summary>
/// 老闆
/// </summary>
class Boss {
public string name;
public Boss(string name) {
this.name = name;
}
}
//建立一個讨薪的委托
delegate void GetMoneyDele(Boss boss)
/// <summary>
/// 律師
/// </summary>
class Lawyee {
public string name;
public Lawyee(string name) {
this.name = name;
}
GetMoneyDele getMoneyDele = null;
Boss target = null;
/// <summary>
/// 員工将讨薪方法委托為律師
/// 1.需要擷取員工的讨薪方法:将方法當成一個參數進行傳遞
/// 2.方法所需要參數也需要傳進來
/// </summary>
public void AddGetMoney(GetMoneyDele dele,Boss boss) {
if (getMoneyDele == null)
{
getMoneyDele = new GetMoneyDele(dele);
target = boss;
}
else {
getMoneyDele += dele;
}
}
/// <summary>
/// 律師開始讨薪了:執行委托
/// </summary>
public void GetMoney() {
getMoneyDele(target);
}
}
static void Main(string[] args)
{
//Boss類:老闆類
//Lawyee類:律師類
//Employee員工類:
//員工張三、李四、王五委托律師趙六律師跟Boss田七讨薪
Boss zj = new Boss("zj");
Employee zhangsan = new Employee("張三", 10000);
Employee lisi = new Employee("李四", 12000);
Employee wangwu = new Employee("王五", 22000);
//zhangsan.GetMoney(zj);
//lisi.GetMoney(zj);
//wangwu.GetMoney(zj);
Lawyee zhaoliu = new Lawyee("趙六");
zhaoliu.AddGetMoney(zhangsan.GetMoney, zj);
zhaoliu.AddGetMoney(lisi.GetMoney, zj);
zhaoliu.AddGetMoney(wangwu.GetMoney, zj);
zhaoliu.GetMoney();
Console.ReadLine();
}