您当前的位置: 首页 >  c#

暂无认证

  • 0浏览

    0关注

    101061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

发布时间:2010-11-22 00:16:00 ,浏览量:0

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("张三"); //触发事件 } }

关注
打赏
1655516835
查看更多评论
立即登录/注册

微信扫码登录

0.0629s