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

C#的事件處理機制應用

編輯:關於C語言

如果要在C#中定義一個事件,首先你要創造一個delegate(委派),用他來定義一個你所想使用事件的標簽,然後你才能使用event關鍵字,在這個委派的基礎上定義一個事件.

兩點需要注意的是:第一,首先你要創造一個委派,第二,根據你所創造的委派來定義一個事件,這才是一個完整的事件定義.

假設我們把書中的Product類進行增強.加入了一個NameChanged事件,此事件只有當Name通過屬性渠道被更改時就會發生.而如果私有變量name是通過類的內部代碼被修改時,此事件不會發生.代碼如下:

public class Product
{
    public delegate void NameChangedEventHandler();//定義了事件
    public event NameChangedEventHandler NameChanged;//事件的調用NameChanged
    public string Name
    {
        get{return name;}
        set{name = value;
            if(NameChanged != null)
            {
                 NameChanged();
            }
           }
    }
}

上一課中的初始化函數Product(參數1,參數2)就無法引發事件,因為此時的name是通過內部被修改的,所以這樣定義的時候,當對象被實例話的時候事件不會發生,但當對象的name屬性通過saleProduct.Name = "ABCDEFG"被更改時,就會引發事件.

在此處我們可以看到,當事件發生時,還沒有執行任何實際的代碼,要處理事件,你必須要建立一個對應此事件的子程序,此子程序所包含的內容就是當一個事件發生時,所要處理的一系列的操作,然後連接子程序到事件.要控制Product類,你需要在另外一個類中定義一個事件鉤子(Event Handler).此事件鉤子要與事件(Event)有著相同的語法,例如,在Product類中事件是沒有返回參數也沒有參數的,所以事件鉤子要與之一致,形式如下:

public void ChangeDetected()

{//此處的代碼就是事件發生時要處理的代碼}

下一步就是將事件鉤子與事件進行掛鉤,首先做一個delegate指向事件鉤子,然後使用+=符號,把delegate附加到事件上面去: 代碼如下:

Product saleProduct = new Product();

saleProduct.NameChanged += new NameChangedEventHandler(ChangeDetected);

現在,當saleProduct.Name = "Kitchen Garbage"執行時,事件就會發生,而發生所要處理的具體操作則寫在ChangeDetected()裡面.

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