C#事件

以前委托的文章: 
https://weimiao.xin/?s=%E5%A7%94%E6%89%98

以前c#的文章 
https://weimiao.xin/?s=c%23

介绍

也是基于委托的,订阅者称之为方法。

事件是C#中另一高级概念,使用方法和委托相关。奥运会参加百米的田径运动员听到枪声,比赛立即进行。其中枪声是事件,而运动员比赛就是这个事件发生后的动作。不参加该项比赛的人对枪声没有反应。
从程序员的角度分析,当裁判员枪声响起,发生了一个事件,裁判员通知该事件发生,参加比赛的运动员仔细听枪声是否发生。运动员是该事件的订阅者,没有参赛的人不会注意,即没有订阅该事件。

–引用“https://www.cnblogs.com/chunhui212/p/5892489.html”

写法

基本

class Program
{

    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    static void Main(string[] args)
    {
        A b = new A();//new 类
        b.eventRun += new A.Delegate(b.runs);//添加订阅事件,这些方法称为订阅者
        b.Run();//将数据发布给订阅者

    }
}
//这里有订阅者,也有执行方法
public class A
{
    public delegate void Delegate();
    public event Delegate eventRun;

    public void Run()
    {
        eventRun();
    }

    /// <summary>
    /// 执行
    /// </summary>
    public void runs()
    {
        Console.WriteLine("最简单的事件写法");
    }
}
基本

(多播委托/委托链)的事件方法

/// <summary>
    /// 
    /// </summary>
    class Program
    {

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        static void Main(string[] args)
        {
            A b = new A();//new 类
            //添加委托链
            A.Delegate z = new A.Delegate(b.runs);
            z += new A.Delegate(b.runs1);
            z += new A.Delegate(b.runs2);
            z += new A.Delegate(b.runs3);
            //添加订阅者
            b.eventRun += new A.Delegate(z);
            //执行
            b.Run();

        }
    }
    public class A
    {
        public delegate void Delegate(string z);//定义委托
        public event Delegate eventRun;//定义事件

        public void Run()
        {
            eventRun("测试");
        }
        //委托链
        public void runs(string z)
        {
            Console.WriteLine(z);
        }
        public void runs1(string z)
        {
            z += "1";
            Console.WriteLine(z);
        }
        public void runs2(string z)
        {
            z += "2";
            Console.WriteLine(z);
        }
        public void runs3(string z)
        {
            z += "3";
            Console.WriteLine(z);
        }
    }
(多播委托/委托链)的事件方法

0 评论
留言