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

转载 2012年03月24日 16:01:06

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

在C#中实现自定义事件

事件编程使得软件技术得到了飞跃似的发展.至于事件编程的好处我就不赘述了.反正它绝对不是用线程就能取代的,因为在某些时候它的优点是线程所无法比拟的:不论在资源的消耗上,还是问题处理的及时性上.所以在学习...
  • wangchao1982
  • wangchao1982
  • 2008年02月01日 17:48
  • 838

C# 自定义事件

C#自定义事件和java有所不同,涉及到委托。下面代码包括自定义事件从事件定义到事件触发和执行的全过程。using System; using System.Collections.Generic; ...
  • changtianshuiyue
  • changtianshuiyue
  • 2013年07月09日 19:30
  • 4302

C#自定义事件实现简介

目标:通过一个实例来按步骤说明C#自定义事件如何创建,引发,接收和取消。例子是一个窗体程序,一个按钮和一个标签,点击按钮的时候就触发一个事件得到当前时间,如果秒是后30秒就输出一个Wasn't a r...
  • gws1229
  • gws1229
  • 2013年12月27日 20:02
  • 991

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

1、声明一个委托类 public delegate SomethingChangedHandler(object sender,EventArgs e);2、在你的类中声明一个事件绑定到该委托 pub...
  • david_520042
  • david_520042
  • 2010年11月22日 00:16
  • 986

C#中自定义事件的触发

 我想在窗体重绘时触发自定义事件,我晕了。经历了两天的浆糊,我总算弄清楚了自定义事件不是我想象的那样运作,可是就是我想象的模式,我也很晕……总的来说,我认为事件可理解为当对象状态改变时,所触发的过程,...
  • xiaochongchong1248
  • xiaochongchong1248
  • 2009年11月19日 13:07
  • 4302

通过c# 实现自定义属性改变触发自定义事件 ,理解自定义事件及其触发过程

以下说明可解释自定义的事件的自定义触发过程: 直接上代码,内含说明(界面是两个文本框textbox1,textbox2,和一个button1,界面的Load事件,button的click事件) ...
  • GoodShot
  • GoodShot
  • 2015年03月05日 10:46
  • 7270

Asp.net 用户控件添加自定义事件asp.net

Asp.net 用户控件添加自定义事件asp.net
  • Sunqlive
  • Sunqlive
  • 2016年09月07日 11:17
  • 940

c# 实现自定义事件访问器 和 实现接口事件

event EventHandler IDrawingObject.OnDraw { add { loc...
  • Joyhen
  • Joyhen
  • 2014年01月12日 17:42
  • 4669

VB中自定义事件和事件处理

一个包含事件的类:ClsWithEvents ClsWithEvents类中,有两个属性Width和Height,这两个属性改变时会分别触发对应的Changed事件。 在 Public Event...
  • wesley219
  • wesley219
  • 2012年06月15日 14:51
  • 1136

JS自定义事件原生

说在开始,Javascript自定义事件类似设计的观察者模式,通过状态的变更来监听行为,主要功能解耦,易于扩展。多用于组件、模块间的交互。 原型模式下的js自定义事件var EventTarget =...
  • wkyseo
  • wkyseo
  • 2016年12月13日 14:39
  • 1784
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#事件-自定义事件的使用方法
举报原因:
原因补充:

(最多只允许输入30个字)