zoukankan      html  css  js  c++  java
  • 委托和事件

    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

  • 相关阅读:
    CRM详细介绍网址
    element上传多图片
    多图片上传WebForm
    MemCached原理
    Redis的原理
    Ninject用法详解
    SQLsugar和unity 的用法
    json中的转义字符的处理
    fiddler
    orm多表关系
  • 原文地址:https://www.cnblogs.com/tylertang/p/4210977.html
Copyright © 2011-2022 走看看