這篇文章出處是Johnny.NetASP.NET 2Share @ 點部落的[入門文章] ASP.NET 事件與委派詳論
筆記開始
使用時機: 寫使用者控制項或自訂控制項
事件(Event):
VB: Public Event ErrorFound(ErrorCode As Integer)
C#的事件不能單獨宣告,而須與委派一起宣告
事件處理函式(Events Handler):
事件處理函式是一個普通的方法 (Method), 可以是 Sub 或是 Function。隨便任何一個方法 (Method) 都可以被當作事件處理函式 ( 傳入的參數必須正確)
委派 (Delegate)
決定應該由哪個Event Handler來處理Event
講白了, delegate 它還真不是什麼東西, 它是單純的一種「語法」, 只是一個關鍵字, 它能讓編譯器把跟在它後面的東西解釋成一個繼承 MulticastDelegate 的類別。以下面這行程式為例:
Event (VB) 和 event (C#) 雖然看起來它使用於「宣告」, 它卻並不是什麼類別; 它純粹只是個關鍵字, 用來告訴編譯程式這個字後面跟著一個將被用做「Event 物件」的一個 myDelete 的 instance 而已。
C#中若不想自己定義委派的類別可以使用EventHandler,如以下範例
ddl.SelectedIndexChanged += new EventHandler(selectedIndexChanged); // 必須選擇在某個方法內宣告 (例如 Page_Load)
EventHandler 本身是一個系統所提供的預設委派型別之一,這個委派的參數型式是固定的。你一定只能採用 (object sender, EventArgs e)
範例一
[VB]
Public Delegate Sub myDelegate(ByVal Code As Integer) ' 宣告委派
Dim SomeDelegate As New myDelegate(AddressOf ErrorHandler) ' 建立委派的實體 (Instance)
Public Sub ErrorHandler(ByVal Code As Integer) ' 建立事件處理函式
' 在這裡處理事件的因應方法
End Sub
Sub Page_Load(...) Handles Me.Load
SomeDelegate(1) ' 當有錯誤發生時直接呼叫委派實體
End Sub
public delegate void myDelegate(int Code); // 宣告委派
public void ErrorHandler(int Code) // 建立事件處理函式
{
// 在這裡處理事件的因應方法
}
protected void Page_Load(object sender, EventArgs e)
{
myDelegate someDelegate = new myDelegate(ErrorHandler); // 建立委派的實體 (Instance)
someDelegate(5); // 當有錯誤發生時直接呼叫委派實體
}
Public Event ErrorFound(ErrorCode As Integer) ' 宣告事件
Public Sub ErrorHandler(ByVal Code As Integer)
' 在這裡處理事件的因應方法
End Sub
Sub Page_Load(...) Handles Me.Load
AddHandler Me.ErrorFound, AddressOf ErrorHandler ' 將事件和事件處理函式之間建立關聯
RaiseEvent ErrorFound(1) ' 當有錯誤發生時發動事件
End Sub
public delegate void myDelegate(int Code);
public event myDelegate ErrorFound; // 宣告事件
public void ErrorHandler(int Code);
{
// 在這裡處理事件的因應方法
}
protected void Page_Load(object sender, EventArgs e)
{
ErrorFound = new myDelegate(ErrorHandler); // 透過委派在事件與事件處理函式間建立關聯
ErrorFound(1); // 當有錯誤發生時發動事件
}
沒有留言:
張貼留言