亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

.Net邊學邊講(三)

2019-11-18 20:40:42
字體:
來源:轉載
供稿:網友
談到event,就不能不先說一下callback和delegate
如果你使用過C的話,你應該知道有一個函數叫qsort,是用來給數組排序的。但這個函數顯然不能承擔廣泛意義上的比較,因此你需要傳遞一個指針,他指向具有比較功能的函數。qsort在每次要比較數組元素時都要調用這個函數。這就是callback的概念,在.Net里也可以實現回調,方法是創建一個接口,實現他,傳遞一個實現此接口的對象的引用。delegate呢,你可以將他理解成一個安全的函數指針。
Notifications跟callback有點類似,但比簡單的回調要復雜的多。callback意味著要調用的callback方法被調用的同時要調用的建立callback的方法。這是一個很緊密的耦合。而Notification則要松散一些,你可以注冊將來某段時間會或者不會發生的Notification,只當他們發生時處理,否則不用。
你也許想讓你寫的組件當一些事情發生時通知其他組件,例如,你想寫一個按鈕組件,當你Click的時候你可能想通知其他組件,而其他組件將不得不準備向你請求Notification,你就要提供一個方法告訴他們你已經有一個可用的Notification。另一方面,你可能也是當其它組件的一些事情發生時希望被通知的人。這時你就需要找到那個特定組件可以提供什么Notification。
在.Net中event是一個你用來廣播、引發、處理Notification的機制。大致是這樣的,可以引發事件的組件聲明這一事件。而希望處理某一特定組件的某一特定事件的組件通過傳遞一個方法的delegate向引發事件的組件注冊。這樣,當事件發生時引發事件的組件就會調用每個已注冊的方法。通過delegate和event我們可以實現異步調用的功能。在C#中是這樣聲明一個代理的:public delegate void LogHandler(String message);代理在處理這種回調時已經是很強大了。但是當我們需要代理被存儲以便以后的Notification,就有一點麻煩了。比如說我們有一個對象Button,有一個Click事件。我們可以聲明一個ClickHandler 的代理類型用于處理Click事件,在我們的Button的Class中聲明一個ClickHandler的public實例,這樣其他組件希望Click發生時被通知,就可以簡單的把他的代理加到Click代理中去。myButton.Click += new ClickHandler(MyMethod);
看上去著好像沒什么問題。但是這里卻存在一個大問題,我們聲明Click代理是public,這違反了我們以前說過的data fields永遠不要聲明成public,這會有一系列麻煩。解決的辦法是聲明成PRivate或protected,然后用屬性解決讀寫。這樣我們可以private聲明Click,在寫一對public方法去增加一個listener及減少一個listener。當然在.Net中,當你聲明一個event時,.Net已經為你做好這一切了。聲明一個事件:
class AlarmTimer {
public event EventHandler Alarm;
// ...
}
這段代碼說明AlarmTimer可以向所有其它對象廣播它可以引發一個叫Alarm的事件。Alarm事件用的是EventHandler代理類型。EventHandler:無返回值、接受兩個參數(Object:指向事件的發送者,EventArgs:包含關于事件的數據)
看一個例子:
class AlarmTimer {
public event EventHandler Alarm;
private Timer myTimer;
public AlarmTimer() {
myTimer = new Timer();
myTimer.Tick += new EventHandler(OnTick);
}
public void Set(Double seconds) {
myTimer.Interval = (Int32)(seconds * 1000);
myTimer.Start();
}
protected void OnTick(Object sender, EventArgs e) {
myTimer.Stop();
if (Alarm != null) Alarm(this, EventArgs.Empty);
}
public void ReEnable() {
myTimer.Enabled = true;
}
}
注意AlarmTimer既引發事件(Alarm)又處理事件(Timer中的Tick事件)
static AlarmTimer myAlarm = new AlarmTimer();
public static void TestEvent() {
myAlarm.Alarm += new EventHandler(TimerEventProcessor);
myAlarm.Set(2);
Console.WriteLine("Timer is set; alarm will go off in two seconds");
application.Run();
}
//處理事件
private static void TimerEventProcessor(
Object myObject, EventArgs myEventArgs) {
if (MessageBox.Show("Wake up! Continue ringing?",
"Count is: " + alarmCounter,
MessageBox.YesNo) == DialogResult.Yes) {
alarmCounter += 1;
myAlarm.ReEnable();
}
else {
Application.Exit();
}
}
注意:Object和EventArgs不是必需的參數,只是這是一個好的寫法模式而已
關于event還有好多沒有說,留著以后慢慢說吧。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美高清视频一区二区| 海角国产乱辈乱精品视频| 久久国产精品久久久| 中文字幕日韩欧美在线| 91亚洲精品久久久久久久久久久久| 久久五月天综合| 91精品在线一区| 国产精品第100页| 国产精品久久久久久网站| 久久91精品国产91久久跳| 国产丝袜一区二区三区免费视频| 亚洲成人激情在线| 日韩精品视频观看| 乱亲女秽乱长久久久| 91精品国产91久久久久| 96pao国产成视频永久免费| 欧美重口另类videos人妖| 日韩精品免费视频| 亚洲国产婷婷香蕉久久久久久| 亚洲国产精品免费| 日韩久久精品成人| 欧美精品成人在线| 欧美裸体男粗大视频在线观看| 欧美日本高清一区| 热99精品里视频精品| 亚洲精品国产suv| 国产精品嫩草影院久久久| 日本高清久久天堂| 欧美激情亚洲另类| 91网站免费观看| 久久久在线视频| 成人xxxxx| 久久精品国亚洲| 国产日产久久高清欧美一区| 日韩电影在线观看免费| 久久久久久尹人网香蕉| 久久国产一区二区三区| 久久久久久久久久久免费| 日韩精品电影网| 日韩中文字幕免费看| 亚洲欧美国产高清va在线播| 欧美日本黄视频| 欧美大片在线免费观看| 国产精品成人aaaaa网站| 91成人在线播放| 欧美日韩国产精品一区| 亚洲va码欧洲m码| 深夜福利91大全| 久久人人爽国产| 亚洲精品久久久久久下一站| 精品中文字幕视频| 午夜免费久久久久| 亚洲成人亚洲激情| 欧美国产日韩一区二区在线观看| 一本色道久久88亚洲综合88| 国产精品羞羞答答| 精品久久久久久国产| 国产精品久久久久久av| 国产在线精品成人一区二区三区| 久久久久久久久久av| 欧美成人精品在线观看| 国产日产欧美a一级在线| 日韩中文在线不卡| 欧美一级在线播放| 亚洲**2019国产| 国产欧美日韩精品在线观看| 久久精品国产亚洲精品| 国产v综合v亚洲欧美久久| 欧美精品午夜视频| 亚洲成人黄色网| 国产成人精品久久久| 亚洲精品在线不卡| 久久免费国产视频| 日本精品视频在线观看| 亚洲一区免费网站| 国产91网红主播在线观看| 亚洲电影免费观看| 国产午夜精品全部视频在线播放| 亚洲第一区第一页| 欧美成人性色生活仑片| 精品国产欧美一区二区五十路| 国产日韩欧美夫妻视频在线观看| 久久韩国免费视频| 欧美激情极品视频| 欧美性猛交丰臀xxxxx网站| 欧美电影免费观看电视剧大全| 国产精品一区av| 中文字幕av一区二区三区谷原希美| 一区二区三区四区视频| 欧美巨大黑人极品精男| 欧美精品电影在线| 国产精品男人的天堂| 欧美国产视频一区二区| 91精品国产综合久久久久久蜜臀| 久久久国产精品x99av| 久久久久国产精品免费网站| 久久免费成人精品视频| 奇米4444一区二区三区| 91精品免费视频| 欧美高清自拍一区| 国产精品久在线观看| 欧美激情2020午夜免费观看| 欧美激情a∨在线视频播放| 久久在线视频在线| 欧美激情一级二级| 亚洲女人天堂成人av在线| 亚洲成人国产精品| 欧美亚洲另类激情另类| 国产精品福利网站| 久久久久久com| 国产精品福利片| www欧美xxxx| 成人免费福利视频| 成人黄色短视频在线观看| 777午夜精品福利在线观看| 欧美激情一区二区三级高清视频| 欧美亚洲另类激情另类| 2021久久精品国产99国产精品| 欧美另类精品xxxx孕妇| 国产精品人成电影| 美日韩精品免费观看视频| 亚洲第一精品夜夜躁人人爽| 久久国产天堂福利天堂| 亚洲激情 国产| 一区二区三区高清国产| 69影院欧美专区视频| 亚洲丝袜一区在线| 91免费在线视频网站| 在线国产精品视频| 国外成人在线播放| 福利视频导航一区| 国产极品jizzhd欧美| 亚洲美女免费精品视频在线观看| 亚洲风情亚aⅴ在线发布| 久久久久久久久久av| 国产精品大陆在线观看| 国产成人黄色av| 97超级碰在线看视频免费在线看| 国产精品久久久久久网站| 欧美亚洲在线观看| 性视频1819p久久| 国产精品久久99久久| 欧美日韩日本国产| 日韩精品在线观看一区二区| 欧美孕妇毛茸茸xxxx| 亚洲精品国产免费| 国产精品久久久久久五月尺| 88xx成人精品| 国内精品久久久久影院 日本资源| 欧美另类老肥妇| 欧美激情视频在线免费观看 欧美视频免费一| 日韩在线观看成人| 日韩av一卡二卡| 在线a欧美视频| 成人久久一区二区三区| 欧美成人剧情片在线观看| 国产激情视频一区| 国产亚洲成av人片在线观看桃| 欧美视频国产精品| 国产精品精品视频| 97在线视频国产| 国产亚洲一级高清| 欧美日韩999| 国产精品高潮呻吟久久av无限|