• 委托和事件


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace DelegateAndEvent
    {
       public  class Caculator
        {
            //dim a CaculateEventArgs,used to save the status info when call the event
            public class CaculateEventArgs : EventArgs
            {
                public readonly int x, y;
                public CaculateEventArgs(int x, int y)
                {
                    this.x = x;
                    this.y = y;
                }
            }
            //dim the event delegate
            public delegate void CalculateEventHandler(object sender,CaculateEventArgs e);
            //dim the event
            public event CalculateEventHandler MyCalculate;
            //support the virtual function
           //提供受保护的虚方法,可以由子类覆写来拒绝监视
            protected virtual void OnCalculate(CaculateEventArgs e)
            {
                if(MyCalculate!=null)
                {
                    MyCalculate(this, e);
                }
            }
            //进行计算,调用该发放表示有新的计算发生
            public void Calculate(int x,int y)
            {
                CaculateEventArgs e = new CaculateEventArgs(x,y );
                //通知所有的事件注册者
                OnCalculate(e);
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace DelegateAndEvent
    {
        /// <summary>
        /// 丁原事件触发者
        /// </summary>
       public  class CaculatorManager
        {
           public void Add(object sender,Caculator.CaculateEventArgs e)
           {
               Console.WriteLine(e.x+e.y );
           }
           public void Substract(object sender,Caculator.CaculateEventArgs e)
           {
               Console.WriteLine(e.x-e.y);
           }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace DelegateAndEvent
    {
        class Program
        {
            static void Main(string[] args)
            {
                Caculator calculator = new Caculator();
                //事件触发者
                CaculatorManager cm = new CaculatorManager();
                //事件绑定
                calculator.MyCalculate += cm.Add;
                calculator.Calculate(100,200);
                calculator.MyCalculate += cm.Substract;
                calculator.Calculate(100,200);
    
                //事件注销
                calculator.MyCalculate -= cm.Add;
                calculator.Calculate(100,200);
                Console.Read();
            }
        }
    }

    输出:

    300

    300

    -100

    -100

  • 相关阅读:
    用powershell启动appfabric报错
    对引用和指针使用以及函数返回引用和指针类型的理解
    数组指针和数组引用做参数的区别(是否能够限定数组大小、数组降价)
    C++静态成员函数基本概念讲解
    函数中变量的生存期和作用域
    如何在Source Insight中配置Pc Lint
    iterator与const_iterator
    周数据转换为天数据的一个Sql数据查询
    如何提高结构对象作为键的哈希表的查找速度
    尽量用iterator代替const_iterator
  • 原文地址:https://www.cnblogs.com/tylertang/p/4210977.html
Copyright © 2020-2023  润新知