讀書筆記——asp.net 2.0 伺服器組件和控制項進階編程0627

來源:互聯網
上載者:User

事件是訊息,如需要傳遞資料,這樣看事件也是資料,是暴露的資料
IPostBackEventHandler
IPostBackDataHandler
發送事件和通知數據僅僅是工作的一半,另一半是用戶端為事件及其相關資料進行註冊。用戶端必須註冊接受的事件。
通過.net的委託實現註冊。利用委託發送事件。
事件數目據類名稱事件名稱和關鍵字EventArgs
事件數目據需要EventArgs
委託名稱將包含EventHandler
用委託執行個體和關鍵字event定義事件
public event visitedataEventHandler gvisite;
實現委託
用委託封裝該方法
事件委託都是多路廣播委託的子集,包括一個稱為調用列表的內聯列表
this.gvisite += mydelegate;
需要一個受保護的虛方法,調用委託將通知發給用戶端。
關於事件最佳化:
把委託事件定義為一個公用欄位,1會浪費系統資源(每個引用都會各自產生)2保證安全執行緒(大多數不會使用線程)每個事件委託欄位產生的add和move方法會產生不必要的開銷(會先鎖定)。
EventHandlerList類來解決這兩個效能問題。
把事件定義成私人靜態屬性
private static readonly object validCriCardEventKey = new object();
將事件定義為屬性,get set用add和remove代替。
調用的方法為 (EventHandlerList Events)
Event.AddHandler
Event.RemoveHandler
Event[validCriCardEventKey]

通過包含頁面通知伺服器控制項。
包含頁面
》返回導致回傳的HTML元素的name屬性值
》檢索控制項樹,尋找上述控制項的UniqueID
》檢測是否實現IpostBackEventHandler介面,介面公開RaisePostBackEvent方法
限定方法和屬性使用介面的名稱
不使用任何修飾符
調用各個受保護的虛方法
void IPostBackEventHandler.RisePostBackEvent(string s)
{
    this.RisePostBackEvent(s);
}
回傳資料
 IPostBackDataHandler --》LoadPostData
 bool IPostBackDataHandler.LoadPostData(string postDataKey,NameValueCollection values)
 {
     return this.LoadPostData(postDataKey,values);
 }
另外實現RaisePostDataEventChanged方法。
 protected virtual void RaisePostDataEventChanged()
 {
     this.RaisePostDataEventChanged();
 }

聲明事件模式:

 1namespace CustomComponents
 2{
 3public class CreditCardForm6 : CreditCardForm5, IPostBackEventHandler,
 4IPostBackDataHandler
 5{
 6private static readonly object PaymentMethodChangedEventKey = new object();
 7public event EventHandler PaymentMethodChanged
 8{
 9add { Events.AddHandler(PaymentMethodChangedEventKey, value); }
10remove { Events.RemoveHandler(PaymentMethodChangedEventKey, value); }
11}
12protected virtual void OnPaymentMethodChanged(EventArgs e)
13{
14EventHandler handler = Events[PaymentMethodChangedEventKey] as EventHandler;
15if (handler != null)
16handler(this, e);
17}
18private static readonly object CreditCardNoChangedEventKey = new object();
19public event EventHandler CreditCardNoChanged
20{
21add { Events.AddHandler(CreditCardNoChangedEventKey, value); }
22remove { Events.RemoveHandler(CreditCardNoChangedEventKey, value); }
23}
24protected virtual void OnCreditCardNoChanged(EventArgs e)
25{
26EventHandler handler = Events[CreditCardNoChangedEventKey] as EventHandler;
27if (handler != null)
28handler(this, e);
29}
30private static readonly object CardholderNameChangedEventKey = new object();
31public event EventHandler CardholderNameChanged
32{
33add { Events.AddHandler(CardholderNameChangedEventKey, value); }
34remove { Events.RemoveHandler(CardholderNameChangedEventKey, value); }
35}
36protected virtual void OnCardholderNameChanged(EventArgs e)
37{
38EventHandler handler = Events[CardholderNameChangedEventKey] as EventHandler;
39if (handler != null)
40handler(this, e);
41}
42private static readonly object ExpirationDateChangedEventKey = new object();
43public event EventHandler ExpirationDateChanged
44{
45add { Events.AddHandler(ExpirationDateChangedEventKey, value); }
46remove { Events.RemoveHandler(ExpirationDateChangedEventKey, value); }
47}
48protected virtual void OnExpirationDateChanged(EventArgs e)
49{
50EventHandler handler = Events[ExpirationDateChangedEventKey] as EventHandler;
51if (handler != null)
52handler(this, e);
53}
54}
55}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.