出處:http://blog.csdn.net/caoxicao
作者:草惜草
轉載請註明出處
HtmlTextWriter
HtmlTextWriter的各種方法的參數取值為以下三種枚舉類型:HtmlTextWriterTag,HtmlTextWriterAttribute和HtmlTextWriterStyle。這些枚舉列舉了HTML4.0的公用簽名、attribute和CSS樣式attribute。HtmlTextWriter中的很多方法都被重載,可以將字串或者枚舉值作為一個參數傳送過去。
-----------------------------------------
委託和事件
我一直深受C#中委託和事件的影響,認為委託就是Delegate,事件是Event.哈哈,原來ASP.NET
中EventHandler就是所謂的委託。狂暈!
.NET Framework 中的事件模型基於具有事件委託,該委託將事件與事件處理常式串連。引發事件需要兩個元素:
儲存事件數目據的類。該類必須從基類 EventArgs 派生。
指向方法的委託,該方法提供對事件的響應。
如果事件不產生資料,則使用事件數目據對象的基類 EventArgs 和事件委託的預定義 EventHandler。
如: public delegate void EventHandler(Object sender, EventArgs e);
這是一個對不包含資料事件委託的聲明,其中 EventHandler 是預定義的事件委託,sender 是引發事件的對象,而 e 是不包含資料的事件數目據對象,EventArgs 是包含事件數目據的類的基類。
----------------------------------------------
複合控制項
EnsureChildControls() 方法是確認當前控制項存在子控制項。如果沒有就建立一個。
複合控制項可選擇是否將子控制項公開為屬性,以及將子控制項的哪些屬性和事件公開為頂級屬性和事件。
如下所示就是將button子控制項的Text屬性公開為ButtonText屬性。
public string ButtonText {
get {
EnsureChildControls();
return _button.Text;
}
set {
EnsureChildControls();
_button.Text = value;
}
}
-----------------------------------------
關於事件最佳化
C#提供了“屬性樣式的事件聲明”
基本格式為:
public event [委託類型] [事件名稱]
{
add { .... }
remove { .... }
}
利用這個被稱為“事件模型”的東西來建立事件委託。Control類為每個事件定義了一個鍵,用於EventHandler中儲存和取回事件委託。
例如下面的代碼顯示了Logon事件的鍵。
private static readonly object EventLogon = new object();
鍵是靜態(在控制項的所有執行個體間共用),因此僅為每個事件建立一次。下面的代碼顯示了C#事件的屬性模型,這是一個Logon事件的聲明。
public event EventHandler Logon {
add {
Events.AddHandler(EventLogon, value);
}
remove {
Events.RemoveHandler(EventLogon, value);
}
}
最後看看On<EventName>(處理事件)方法的實現。這種方法主要用來引發事件。當用事件的屬性模型時,必須從EventHanderList中取回委託,然後在調用附加的處理常式前,將其轉變成事件委託類型。
protected virtual void OnLogon(EventArgs e) {
EventHandler logonHandler = (EventHandler)Events[EventLogon];
if (logonHandler != null) {
logonHandler(this, e);
}
}
註:這裡logonHandler已經是委託類型的執行個體,故而logon
註:System.ComponentModel.EventHandlerList 提供一個簡單的委託列表。