今天回顧了一下委託,又有點東西要寫出來,哈哈,說一下這東西的由來,其實程式就是虛擬現實世界,程式中的東西,一般都能在現實中找到影子
首先,委託的要義是通知,和響應(所以觀察者模式這個應用較多)
在現實中的流程是這樣的
0.通知人,和被通知人互相約定,用什麼標準通知(如電話)
1.被通知人,要告訴通知人,用標準的什麼執行個體通知(如電話號碼+手機組成)
2.通知人和被通知人各自幹自己的事,互不影響。
3。通知人幹了一件事,影響了被通知人,於是他拿起電話,打了一個電話號碼,然後告訴被通知人,我幹了什麼事,怎麼乾的,然後被通知人又告訴通知人一些事。
4。被通知人,根據告知,處理問題
然後把他翻譯成.net的委託
public partial class Default3 : System.Web.UI.Page
{
a a1;
b b1;
/// <summary>
/// 情境
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
a1 = new a();
b1 = new b();
a1.連絡人電話 = new 電話聯絡(b1.這是我的電話號碼用這個通知我上線);//告訴通知人我的電話(這裡就是函數指標傳遞)
}
/// <summary>
/// 發生動作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void 開始玩魔獸_Click(object sender, EventArgs e)
{
a1.打電話();
}
}
public delegate string 電話聯絡(string 聯絡內容);
/// <summary>
/// 通知人
/// </summary>
public class a
{
public 電話聯絡 連絡人電話;
public void 打電話()
{
if (連絡人電話 != null)
{
string R= 連絡人電話("我上線了,在2伺服器");
}
}
}
/// <summary>
/// 被通知人
/// </summary>
public class b
{
public string 這是我的電話號碼用這個通知我上線(string 聯絡內容)
{
#region 開機,上線,處理過程
#endregion
return "好了,我上線了,在也2伺服器";
}
}
註:委託(函數指標只是實現一種辦法,如果沒有函數指標,比如js,難道就不實現了嗎,事實上,js 的回調還是很多的,實現方式 一般開始傳方法名,然後執行方法,其實原理還是一樣的,就是傳不了函數的指標了,而是傳函數名,具體實現下次再寫)
還有,如果自己的類裡有委託的話,基本上都是通知人