今天是學(xué)習(xí)C#第17天。。。
委托:
一個(gè)事物想執(zhí)行一個(gè)方法但卻不知如何實(shí)現(xiàn),而另一個(gè)知道怎么去實(shí)現(xiàn),
可以將其委托給知道方法的那個(gè)人。
委托就是用來(lái)儲(chǔ)存方法的結(jié)構(gòu)
委托類(lèi)型:
- 委托的別名:代理、句柄
- 委托是自定義類(lèi)型
- 委托是引用類(lèi)型
返回值 參數(shù)
House xxxxxx (float money,float area)
delegate House BuyHouseEventHandle(float money, float area);
即:
delegate 返回值類(lèi)型 委托類(lèi)型名(參數(shù)列表);
委托對(duì)象:
[訪問(wèn)修飾符] 委托類(lèi)型名稱(chēng) 委托對(duì)象的名稱(chēng);
public BuyHouseEventHandle buyHouseEventHandle; l
給委托對(duì)象賦值:
委托對(duì)象 = 方法名;
xiaoming.buyHoueEventHandle = intermediary.BuyHouse;
注意只寫(xiě)方法名,沒(méi)有括號(hào)
Tips:委托對(duì)象,保存的是方法的內(nèi)存地址
委托對(duì)象的綁定與解綁定:
xiaoming.buyHoueEventHandle += lianjia.BuyHouse;
xiaoming.buyHoueEventHandle -= lianjia.BuyHouse;
委托對(duì)象的執(zhí)行:
委托對(duì)象(參數(shù)列表);
House house = xiaoming.buyHoueEventHandle(1000000,80);
Tips:委托對(duì)象為空是不能執(zhí)行的,執(zhí)行前先提前判斷
匿名函數(shù):
- 匿名函數(shù)就是沒(méi)有函數(shù)名的函數(shù)
- 匿名函數(shù)僅限委托綁定
委托對(duì)象 += delegate ([參數(shù)列表])
{
//方法體
}
xiaoming.buyHoueEventHandle += delegate(float m,float a)
{
Console.WriteLine("匿名中介在幫忙找房子喲");
return null;
};
回調(diào)函數(shù):
public void Marry(BuyHouseEventHandle buyHouse) {
if(buyHouse == null) {
Console.WriteLine(“No!!!!”);
}
else
{
buyHouse(1000000,200);
Console.WriteLine(”有房子啦,我好幸福!");
} }
xiaomei.Marry(intermediary.BuyHouse);
事件:
特殊的委托對(duì)象:
[訪問(wèn)修飾符] event 委托類(lèi)型 事件名稱(chēng)
public event BuyHouseEventHandle buyHouseEvent;
- 在非事件所在的類(lèi)中,只能對(duì)事件進(jìn)行綁定(+=)和解綁定(-=)
- 在事件所在的類(lèi)中,可以對(duì)事件進(jìn)行賦值(=)、調(diào)用、綁定(+=)和解綁定(-=)