程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 深入解析C#編程中的事件(1)

深入解析C#編程中的事件(1)

編輯:關於C語言

一個事件是一個使對象或類可以提供公告的成員。用戶可以通過提供事件句柄來為事件添加可執行代碼。事件使用事件聲明來聲明:

一個事件聲明既可以是一個事件域聲明也可以是事件屬性聲明。在每種情況中,聲明都可以由屬性集合, new 修飾符, 四個訪問修飾符的有效組合 和一個靜態修飾符組成。

一個事件聲明的類型必須是一個代表類型, 而那個代表類型必須至少同事件本身一樣可訪問。

一個事件域聲明與一個聲明了一個或多個代表類型域的域聲明相應。在一個事件域聲明中不允許有readonly 修飾符。

一個事件屬性聲明與聲明了一個代表類型屬性的屬性聲明相應。除了同時包含get訪問符和set訪問符的事件屬性聲明,成員名稱和訪問符聲明對於那些屬性聲明來說都是相同的,並且不允許包含virtual、 override和abstract 修飾符。

在包含一個事件成員聲明的類或結構的程序文字中,事件成員與代表類型的私有域或屬性相關,而這個成員可以用於任何允許使用域或屬性的上下文中。

如果一個類或結構的程序文字外面包含一個事件成員聲明,這個事件成員就只能被作為+= 和 -= 操作符 (§的右手操作數使用。這些操作符被用來為事件成員附加或去掉事件句柄,而這個事件成員的訪問操作符控制操作在其中被執行的上下文。

由於+= 和 -= 是唯一可以在聲明了事件成員的類型外的事件上使用的操作,外部代碼可以為一個事件添加或去掉句柄,但是不能通過任何其他途徑獲得或修改基本事件域或事件屬性的數值。

在例子中

public delegate void EventHandler(object sender, Event e);
public class Button: Control
{
 public event EventHandler Click;
 protected void OnClick(Event e) {
  if (Click != null) Click(this, e);
 }
 public void Reset() {
  Click = null;
 }
}

對使用Button類中的Click事件域沒有限制。作為演示的例子,這個域可以在代表調用表達式中被檢驗、修改和使用。類Button中的OnClick方法"引起"Click事件。引起一個事件的概念與調用由事件成員表示的代表正好相同-因此,對於引起事件沒有特殊的語言構造。注意代表的調用是通過檢查保證代表是非空後才進行的。

在類Button的聲明外面,成員Click只能被用在+= 和 -= 操作符右手邊,如下

b.Click += new EventHandler(...);

它把一個代表附加到事件Click的調用列表中,並且

b.Click -= new EventHandler(...);

它把一個代表從Click事件的調用列表中刪除。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved