C#事件-自訂事件的使用方法

來源:互聯網
上載者:User

1、聲明一個委託類

public delegate SomethingChangedHandler(object sender,EventArgs e);
2、在你的類中聲明一個事件綁定到該委託 public event SomethingChangedHandler Changed;
3、在相應的方法中觸發此事件
public void ChangeSomething()
{

Changed(this,new EventArgs); //觸發事件

}

4、在調用者訂閱事件
your class's instance.Changed+=new SomethingChangedHandler(你的方法名);

5、取消訂閱
訂閱該事件的對象.Changed-=new SomethingChangedHandler(你的方法名);

注意:因為c#中事件是通過委託實現的,而委託不能被繼承,所以導致事件只能在其定義的類中按事件名(該事件委託的參數...) 的形式觸發。如果一個事件需要在衍生類別中被觸發,可以在基類中定義一個觸發該事件的方法 SendSomeEvent(),衍生類別中重寫該方法,並調用base.SendSomeEvent();

看下面的執行個體:

namespace ConsoleApplication3
{
    class 出版社                                                         //定義出版社類
    {
        public delegate void 出版();                             //聲明事件所需的代理
        public event   出版 已經出版;                           //事件的聲明
        public void 發行()                                            //觸發事件的方法
        {
            Console.WriteLine("發行刊物");
            已經出版();
        }
    }
    class 訂閱者                                                       //定義訂閱者類
    {
        public void 訂閱()                           
        {
            Console.WriteLine("訂閱者已經訂閱");
        }
    }
    class Program
    {

        static void Main(string[] args)
        {
            出版社 甲出版社=new 出版社();
            訂閱者 張三=new 訂閱者();
            甲出版社.已經出版+=new 出版社.出版(張三.訂閱);     //向事件發行者訂閱一個元事件
            甲出版社.發行();                                                        //觸發事件
         }
    }
}

using System;

public class Publisher //出版社
{
public delegate void Publish(string name); //聲明事件所需的代理
public event Publish OnPublish; //事件的聲明
public void issue(string _name) //觸發事件的方法
{
    if (OnPublish != null)
    {
      Console.WriteLine("發行刊物");
      OnPublish(_name);
    }
}
}

class Subscriber //訂閱者
{
public void Receive(string str) //定義事件處理常式
{
    Console.WriteLine("訂閱者" + str + "已經收到了刊物!");
}
}

class story
{
static void Main()
{
    Publisher Pub = new Publisher();
    Subscriber zs = new Subscriber();
    Pub.OnPublish += new Publisher.Publish(zs.Receive);
    Pub.issue("張三"); //觸發事件
}
}

 

 

文章摘自:http://www.189works.com/article-45562-1.html

聯繫我們

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