一、使用時機:
當撰寫一個class裡面需要呼叫該class無法呼叫到的函式的時候,就會需要用到委派
二、使用方法:
class Mouse
{
private string name;
public Mouse(string name)
{
this.name = name;
}
public string Name
{
set { name = value; }
get { return name; }
}
public string Run()
{
return "我是" + Name + ",貓來了 快跑!";
}
public string Help()
{
return "我是" + Name + ",貓來了,救命啊!";
}
}
class Cat
{
private string name;
//1.EventDelegate是一個型別,此型別的參考變數將指向一個無傳入參數,回傳string的方法
//2.宣告有一個委派叫EventDelegate,他到時候要呼叫一個「沒傳入參數的函式,然後這函式的回傳值是string(的方法)」
public delegate string EventDelegate(); //1.宣告委託
// shoutDelegate 是一個變數,它可以指向一個無傳入參數且回傳為string的方法
public EventDelegate shoutDelegate; // 2.宣告事件變數 //產生委託物件的參考
public Cat(string name)
{
this.name = name;
}
public string Name
{
set { name = value; }
get { return name; }
}
public string Shout()
{
string str = "我是"+Name+"!喵~"+'\n';
if (shoutDelegate != null)
{
str = str + shoutDelegate();
return str;
}
else return "(null)";
}
}
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat("咪咪");
Mouse mouse = new Mouse("米奇");
cat.shoutDelegate =
new Cat.EventDelegate(mouse.Run); // 4. 將方法綁到事件變數中
//不懂的是:這裡沒呼叫cat.Shout() , 卻會出現: 「我是咪咪!喵~」? 好怪喔!
//不過這裡有呼叫mouse.Run 所以會出現: 我是米奇,貓來了 快跑!
Console.WriteLine("{0}",cat.Shout());
Console.Read();
}
}
執行結果: