委托:其實就是一種命令,A委托B,做事情的是B
上面是在現實世界里,反過來在程序世界中的.
委托實際上就是存儲了方法的地址,做事情的仍然是B
.net編程規范說明聲明委托是以xxxxEventHandler結尾
委托的語法格式:
public?+?delegate關鍵字+方法返回值+委托名
一個委托的例子
class?HelloWorld
{
//定義一個委托
public?delegate?void?GreetingDelegate(string?name);
兩個待委托的方法
public?static?void?EnglishGreeting(string?name){
Console.WriteLine?("hello,"+name);
}
public?static?void?ChineseGreeting(string?name){
Console.WriteLine?("你好,"+name);
}
定義一個有參數并且參數之一為委托的方法.只要傳入為何種方法則調用哪種方法的委托public?void?GreetingPeople(string?name,GreetingDelegate?greeting){
greeting?(name);
}
public?static?int?Main?(string[]?args)
{
HelloWorld?hw?=?new?HelloWorld?();
hw.GreetingPeople?("黃河",?HelloWorld.ChineseGreeting);
hw.GreetingPeople?("huanghe",?HelloWorld.EnglishGreeting);
return?0;
}
}
事件一般會牽扯到兩個角色:
1.事件發起者(Sender/Publisher):實際上就是事件的發行者.
2.事件訂閱者(Receiver):對發起者發的通知感興趣的話,就可以選擇訂閱該事件.
事件絕大部分都要和委托連用.
關鍵字delegateevent
匿名函數-->不記名函數c#2.0引進的
lambda表達式c#3.0引進的
聲明一個委托帶參數帶返回值的委托
public?delegate?string?myDelegate(string?name);
帶參數帶返回值
myDelegate?d4;
d4?=?(string?name)=>?"你好"?+?name;
Console.WriteLine?(d4?("中國"));
"mL?t