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

  • 相关阅读:
    HttpModule与HttpHandler详解
    未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。
    javascript的escape()函数
    温故知新 javascript 正则表达式
    大爽Python入门教程 53 文件读写
    大爽Python入门教程 62 变量进阶 局部变量`local`与全局变量`global`
    大爽Python入门教程 61 变量进阶 可变`mutable`、不可变`immutable`
    大爽Python入门教程 57 思路与答案
    大爽Python入门教程 65 函数进阶 内置函数(Builtin Functions)
    大爽Python入门教程 55 实践演示 控制台版本——简易成绩管理系统
  • 原文地址:https://www.cnblogs.com/sandea/p/3289919.html
Copyright © 2020-2023  润新知