日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.NET自定义服务器控件内部细节系列教程一

發(fā)布時間:2023/12/19 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.NET自定义服务器控件内部细节系列教程一 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如大家要轉載,請保留本人的版權:
/*
*Description:asp.NET自定義服務器控件內(nèi)部細節(jié)系列教程
*Auther:崇崇-天真的好藍
*MSN:chongchong2008@msn.com
*Dates:2007-05-20
*Copyright:ChongChong2008 YiChang HuBei China
*/
關于自定義asp.NET自定義服務器控件文章和源碼示例網(wǎng)上已經(jīng)很多了,不過有些內(nèi)部些節(jié)方面,讓一些初次接觸這方面技術的朋友難以理解,對服務器控件的方方面面也很疑惑。為此,我抽出些時間把自己所理解的東西整理出來,方便大家交流學習。

一 理解事件委托,事件,引發(fā)事件以及事件優(yōu)化

?? .NET框架的事件委托和事件數(shù)據(jù)的命名約定:
?? 事件數(shù)據(jù)類由事件名加后綴EventArgs構成,如:SXLoginEventArgs
?? 事件委托由事件名加后綴EventHandler構成,如:SXLoginEventHandler
?? 引發(fā)事件的方法名字是在事件前加上前綴On,OnSXLogin

?? 1。事件委托
????? 委托其實是一個類,委托具有函數(shù)指針的粒度和接口的安全性,為什么這樣說,是因為委托就是安全類型的函數(shù)指針,用來回調方法,方法的簽名必須和委托的簽名相匹配。

????? 下面我們看看委托的聲名:
????????? public delegate void SXLoginEventHandler(object sender,SXLoginEventArgs e);

????? 上面的定義表示定義了一個SXLoginEventHandler的事件委托,返回類型是void,并分別接受一個object和SXLoginEventArgs類型的參數(shù)。object表示事件的發(fā)送者,e表示描述事件的數(shù)據(jù)。

????? 可以看出事件委托的聲名和類的聲名是類似的,只需增加關鍵字delegate即可。
????? 委托間接派生于System.Delegate,直接派生于System.MulticastDelegate。

?? 2。事件
????? 事件是當有動作發(fā)生或狀態(tài)改變時,類發(fā)出的信息或通知。

????? 下面我們看看事件的聲名:
?????????? public event SXLoginEventHandler SXLogin ;
????? 可以看出事件是與一個委托相關聯(lián)的。

?? 3。引發(fā)事件
????? 為了在類中實現(xiàn)事件,需要一個事件數(shù)據(jù)類,事件委托以及一個發(fā)布事件通知的方法。我們需要把這些組合在一起,下面給一個例子:
????? 3.1 如果類沒有任何關聯(lián)的事件數(shù)據(jù),就直接使用EventArgs類,或其它已存在的事件數(shù)據(jù)類,必須匹配。否則,需要定義一個事件數(shù)據(jù)類,這個類必須從System.EventArgs中派生,如下:
????????? public class SXLoginEventArgs:EventArgs{...}

????? 3.2 如果事件沒有關聯(lián)的數(shù)據(jù),就直接使用System.EventHandler作為事件委托,否則,需要定一個事件委托,如下:
????????? public delegate void SXLoginEventHandler(object sender , SXLoginEventArgs e );

????? 3.3 用event關鍵字定義事件成員,后面緊跟與此對應的事件委托,如下:
????????? public event SXLoginEventHandler SXLogin ;
????? 3.4 在類中定義一個虛方法調用事件委托,方法的名字是在事件前加上前綴On,如下:
????????? protected virtual void OnSXLogin(SXLoginEventArgs e)
?? {
??if(SXLogin != null)
??{
???SXLogin(this , e);
??}
?? }

?? 4。事件優(yōu)化
????? 如果一個類中引發(fā)了多個事件,通過為每一個事件聲名一個事件字段成員來執(zhí)行時低效的,為此我們換一種方法用屬性來定義事件。
????? .NET框架有一個System.ComponentModel.EventHanlderList類,這個類是一個優(yōu)化了的委托存儲和取回的鏈表。下面來看看優(yōu)化事件模式是如何實現(xiàn)的:
??????? private EventHanlderList events ;
??????? protected EventHanlderList Events
?{
??get
??{
???if(events==null)
???{
????events = new EventHanlderList();
???}
???return events;
??}?
?}

?protected static readonly object SXLoginEventObject = new object();

?我們用屬性而不是字段來定義事件,如下:
?public event SXLoginEventHandler SXLogin
?{
??add{Events.AddHandler(SXLoginEventObject,value)};
??remove{Events.RemoveHandler(SXLoginEventObject,value)};
?}

總結

以上是生活随笔為你收集整理的asp.NET自定义服务器控件内部细节系列教程一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。