zoukankan      html  css  js  c++  java
  • 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 //出版社
    {
    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("张三"); //触发事件
    }
    }

  • 相关阅读:
    自定义控件省市区:仿苹果级联菜单
    【数据存储】SQLite数据库存储(10) 操作通讯记录的ContentProvider
    js跨域的理解与实现
    HTML5学习笔记
    [置顶] 高效前端优化工具Fiddler入门教程
    iis7.0 cpu 限制
    centos下安装apache + subversion(转)
    PHP页面控制访问
    [置顶] 高性能建站之前端优化篇
    [置顶] 构架高性能WEB网站的几点知识
  • 原文地址:https://www.cnblogs.com/sandea/p/3289919.html
Copyright © 2011-2022 走看看