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. [转] javax.servlet.jar - jar not loaded问题解决

    把那个jsp-api.jarservlet-api.jar删除即可! Details:把 webapps\maintenance\WEB-INF\lib\ 下面的 servlet-api.jar 删掉 ...

  2. JS对象和数组

    /* 数组和对象 [JavaScript 权威指南 第五版] */ /* 对象: 是一个无序属性集合, 每个属性都有自己的名字和值 */ /* 创建对象简单方法, 对象直接量 */ var obj = ...

  3. 手机在线更新系统MySQL数据库服务器参数优化mycnf,16G内存8核CPU,

    业务场景: 后台支持手机在线更新系统,db服务器内存16G,8核,dell的pc服务器. qps: 200个左右 tps: 1个左右 一分钟50几个 sort_buffer_size = 32M 大了 ...

  4. WPF中的动画——(五)关键帧动画

    与 From/To/By 动画类似,关键帧动画以也可以以动画形式显示目标属性值. 和From/To/By 动画不同的是, From/To/By 动画只能控制在两个状态之间变化,而关键帧动画则可以在多个 ...

  5. redis节点管理-新增从节点

    原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg12.html 新增从节点 新增一个节点7008节点,使用add-node --slave命令. [pl ...

  6. USER Management | Role Categories | Roles | Indirect Responsibilities

    User Mangement Application helps system administrators to assign or un-assign a responsibility for m ...

  7. 【spring cloud】spring cloud中启动eureka集群时候,发生端口已经绑定的报错The Tomcat connector configured to listen on port 8000 failed to start. The port may already be in use or the connector may be misconfigured.

    在分别设置 进行微服务eureka集群启动时候,执行命令行启动jar包时候,报错前面一个端口8000已经被使用,而我这里启动的配置文件中端口号是8001,怎么会导致端口冲突呢?? 但是报错我的端口冲突 ...

  8. FIS常用功能之资源合并

    这节讲资源合并,实战目录如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  9. 实现同时提交多个form(基础方法) 收集

    实现同时提交多个form(基础方法) 收集 分类: 1.2-JSP 1.3-J2EE 1.1J2se 1.0-Java相关2011-12-01 20:59 1644人阅读 评论(0) 收藏 举报 bu ...

  10. iOS:Reachability网络监听

    iOS利用Reachability确认网络环境3G/WIFI 开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息.如果没有处理它们,是不会通过Apple的审查的,一般情况下,可以把网络监 ...