C# 事件

來源:互聯網
上載者:User

標籤:c#   event   事件   

本篇文章我們來討論C#中的事件。委託是事件的基礎,瞭解委託請點擊C#委託 。
我們先來看下面這個類

public class Person{    public string Name { get; set; }    public int Age { get; set; }    public void ZhuangBi()    {        string topic="I am newbility";        Console.WriteLine(topic);    }}

這個Person類有一個ZhuangBi方法,大家都知道,一個人關起門來裝逼太沒意思,所以我們希望在執行ZhuangBi方法時通知感興趣的人,讓他們知道我們在裝逼。問題是怎麼通知感興趣的人呢?觀察者模式可以將感興趣的人抽象為介面,在Person類內部維護一個介面集合,在執行ZhuangBi方法時可以通知到所有感興趣的人,可這不在我們討論的範圍內。這次我們通過C#的事件機制來實現對外界發出通知。
想用事件,必須先有委託,我們來定義一個委託

public delegate void ZhuangBi_Handler(string name, string topic);

有了委託之後,我們來改寫Person類

public class Person{    public Person(string name)    {        this.Name = name;    }    public string Name { get; set; }    public int Age { get; set; }    public event ZhuangBi_Handler ZhuangBi_Completed;    public void ZhuangBi()    {        string topic = "I am newbility";        Console.WriteLine(topic);        if (ZhuangBi_Completed != null)        {            ZhuangBi_Completed(Name, topic);        }    }}

我們定義了一個ZhuangBi_Handler 類型的事件 ZhuangBi_Completed,在裝逼完成後,我們來對外界發出通知。
下面我們編寫一個類,來註冊(或者叫訂閱)這個事件。我們寫一個粉絲類

public class Funs{    static void Main(string[] args)    {        Person person = new Person("kai_ge");        person.ZhuangBi_Completed += person_ZhuangBi_Completed;        person.ZhuangBi();    }    private static void person_ZhuangBi_Completed(string name, string topic)    {        Console.WriteLine("哇,{0}又開始裝逼了,他說:{1}", name, topic);    }}

我們在類內部定義一個事件對象,可以被很多個物件註冊。當類的內部發生特定的行為時,我們在類內部可以向所有外部的註冊者發送通知。
我們的這個類是如此的成功,在社會上產生了巨大的影響,也包括下面這個類

public class PoliceMan{    static void Main(string[] args)    {        Person person = new Person("kai_ge");        person.ZhuangBi_Completed += person_ZhuangBi_Completed;        person.ZhuangBi();    }    static void person_ZhuangBi_Completed(string name, string topic)    {        Console.WriteLine(name + ",我們懷疑你跟一起裝逼案有關,請跟我們到警局接受調查,證據為:" + topic);    }}

備忘:
1. 兩個註冊者都在Main函數中定義,如果你把代碼複製到本地編譯,兩個註冊者不能同時編譯,你可以把一個注釋掉。我之所以這麼寫,是為了降低訂閱類的複雜性,否則又得定義一大堆類,這樣我們的主題就跑偏了。
2. 裝逼有風險,雨天要謹慎。

C# 事件

聯繫我們

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