程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#事件-自定義事件的使用方法

C#事件-自定義事件的使用方法

編輯:C#入門知識

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 //出版社www.2cto.com
{
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("張三"); //觸發事件
}
}
 


摘自   那晚雪飛揚 

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