C#的事件處理機制應用

來源:互聯網
上載者:User

如果要在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()裡面.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.