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#事件-自定义事件的使用方法(转载)的更多相关文章

  1. 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作

    上一篇小编带大家熟悉了一下ActiveX的建立以及相关的概念,(http://blog.csdn.net/u014028070/article/details/38424611) 本文介绍下如何给控件 ...

  2. 主动触发事件 自定义事件 trigger 及其用法

    1. 触发自定义事件方式 js.jq 2. jq 触发 2.1 默认支持的事件 $('#h').on('click',function(){ $(this).append('<p>p< ...

  3. Java的事件自定义事件学习

    课程设计要做一个游戏,由于对C++不是很熟悉,老师也准许使用java 或者其他的语言,在.net我学过事件,一种委托回调,但是在java 我不是很了解,应该原理都相同吧! 游戏大致是这样的,现在这在写 ...

  4. js原生创建模拟事件和自定义事件的方法

    让我万万没想到的是,原来<JavaScript高级程序设计(第3版)>里面提到的方法已经是过时的了.后来我查看了MDN,才找到了最新的方法. 模拟鼠标事件MDN上已经说得很清楚,尽管为了保 ...

  5. javascript和jquey的自定义事件小结

    “通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用 ...

  6. 【教程】【FLEX】#003 自定义事件、模块间通讯

    本篇笔记,主要阐明 事件是如何创建 和 如何使用自定义事件达到模块之间通讯 的效果. 句子解释: 什么叫做模块之间的通讯呢?? 简单点说,就是两个模块之间可以互相传数据. A模块 可以接收到 B模块的 ...

  7. jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间

    http://blog.csdn.net/pigpigpig4587/article/details/24727791 jQuery事件命名空间 jQuery支持事件命名空间,以方便事件管理.例如,在 ...

  8. Spring Boot(六)自定义事件及监听

    事件及监听并不是SpringBoot的新功能,Spring框架早已提供了完善的事件监听机制,在Spring框架中实现事件监听的流程如下: 自定义事件,继承org.springframework.con ...

  9. Spring容器事件、自定义事件

    Spring容器内置事件,如容器的启动.停止.关闭.销毁等事件 <bean name="contextStartedHandler" class="com.nuts ...

随机推荐

  1. DoTA与人生

    一个dota菜鸟的人生感悟                接触Dota有了快3年之久,3年里可以经历很多东西,经历了很多东西之后就会有很多的感悟,有些感悟抽象的表达不出来,但是借助于dota,可以间接 ...

  2. Mysql五种时间格式

    YEAR [字节数]:1 [取值范围]:1901~2155 [赋值]: 4位数字 2位字符串:'00'~'69'相当于2000~2069:'70'~'99'相当于1970~1999 2位数字:与2位数 ...

  3. 安装配置convirture

    Author: Jin Date: 20130627 Title: 安装配置convirture 参考: http://www.convirture.com/wiki/index.php?title= ...

  4. Ubuntu 16.04搭建原始Git服务器

    说明:不要把有限的生命浪费到权限斗争中! 1.安装SSH sudo apt-get install openssh-server sudo service ssh start 2.安装Git sudo ...

  5. opengl笔记——OpenGL好资料备忘

    Plane Equation 注:面可理解为:连接面上的点与原点,投影相同(为:a*x1+b*x2+c*x3) OpenGL Matrix Class (C++) Overview OpenGL fi ...

  6. 猫、路由器、交换机和PC

    转载:http://duanzw102.blog.163.com/blog/static/161838173201392431722650/ 猫是 modem,是有网络供应商,比如电信公司提供的拨号工 ...

  7. JS/JQuery判断是否移动设备+JS/JQuery判断浏览器类型

    原文:https://blog.csdn.net/Little_Stars/article/details/48624669 JS代码如下(点击事件依赖JQuery): //判断设备类型 $(&quo ...

  8. IDEA/Pycharm/Webstorm项目目录中的 Scratches and Consoles作用

    临时的文件编辑环境,通过临时的编辑环境,你可以写一些文本内容或者一些代码片段. 参考:https://segmentfault.com/a/1190000014202363 https://www.w ...

  9. Linux的进程间通信-文件和文件锁

    前言 使用文件进行进程间通信应该是最先学会的一种IPC方式.任何编程语言中,文件IO都是很重要的知识,所以使用文件进行进程间通信就成了很自然被学会的一种手段.考虑到系统对文件本身存在缓存机制,使用文件 ...

  10. 深度增强学习--DQN的变形

    DQN的变形 double DQN prioritised replay dueling DQN