zoukankan      html  css  js  c++  java
  • c#学习心得(3)

    事件与委托 

     代码段创建类的对象并在该对象上调用方法,此情况下,调用程序是主动,而对象是被动的;但是也有相反的情况,如对象执行过程中发生某些事情通知调用程序,此类事情称之为事件(Event),z其他代码段编写一种方法接收和处理发布的事件,此过程称之为委托(delegate)。

    需要注意的是事件类型与委托标识符要匹配

    using System;
    /*
    public delegate void EvenNumberHandler(int Number);//定义了一个委托
    
    class Counter
    {
        public event EvenNumberHandler OnEvenNumber;
    
        public Counter()
        {
            OnEvenNumber = null;
        }
        public void CountTo100()
        {
            int CurrentNumber;
    
            for (CurrentNumber = 0; CurrentNumber <= 100; CurrentNumber++)
            { 
            if (CurrentNumber % 2 == 0)
                if (OnEvenNumber != null)
    
                {
                    OnEvenNumber(CurrentNumber);
                }
            }
        }
    }
    class EvenNumberHandlerClass  
    {
        public void EvenNumberFound(int EvenNumber)
        {
            Console.WriteLine(EvenNumber);
        }
    }
    class EvenNumberHandlerClass2
    {
        public void EvenNumberFound2(int EvenNumber1)
        {
            Console.WriteLine(EvenNumber1);
        }
    }
    class MainClass
    {
        public static void Main()
        {
            Counter MyCounter = new Counter();
            EvenNumberHandlerClass MyEvenNumberHandlerClass = new EvenNumberHandlerClass();
            EvenNumberHandlerClass2 MyEvenNumberHandlerClass2 = new EvenNumberHandlerClass2();
           
    
            MyCounter.OnEvenNumber += new EvenNumberHandler(MyEvenNumberHandlerClass.EvenNumberFound);//可以将任意多的委托
            MyCounter.OnEvenNumber += new EvenNumberHandler(MyEvenNumberHandlerClass2.EvenNumberFound2);  //安装事件,事件在前 委托在后                                                                                     //实例与一个事件联系起来
            MyCounter.CountTo100();
            
        }
    }
    */
    //标准化事件的设计
    public delegate void EvenNumberHandler (object Originator,OnEvenNumberEventArgs EvenNumberEventArgs);
    
    class Counter
    {
        public event EvenNumberHandler OnEvenNumber;
        public Counter()
        {
            OnEvenNumber = null;
        }
    
        public void CountTo100()
        {
            int CurrentNumber;
    
            for (CurrentNumber = 0; CurrentNumber <= 100; CurrentNumber++)
            {
                if (CurrentNumber % 2 == 0)
                {
                    if (OnEvenNumber != null)
                    {
                        OnEvenNumberEventArgs EventArguments;
    
                        EventArguments = new OnEvenNumberEventArgs(CurrentNumber);
                        OnEvenNumber(this, EventArguments);//????存在疑问this到底是如何使用的
                    }
                }
            }
        }
    }
    public class OnEvenNumberEventArgs : EventArgs
    {
        private int EvenNumber;
    
        public OnEvenNumberEventArgs(int EvenNumber)
        {
            this.EvenNumber = EvenNumber;//this
        }
    
        public int Number
        {
            get
            {
                return EvenNumber;
            }
    
        }
    }
    class EventNumberHandlerClass
    {
        public void EvenNumberFound(object Originator, OnEvenNumberEventArgs EvenNumberEventArgs)
        {
            Console.WriteLine(EvenNumberEventArgs.Number);
        }
    }
    class MainClass
    {
        public static void Main()
        { 
              Counter  MyCounter = new Counter ();
              EventNumberHandlerClass MyEventNumberHandlerClass = new EventNumberHandlerClass();
              MyCounter.OnEvenNumber += new EvenNumberHandler(MyEventNumberHandlerClass.EvenNumberFound);
              MyCounter.CountTo100();
       
        }
    
    }
    

      

  • 相关阅读:
    Java多线程问题
    pattern-matching as an expression without a prior match -scala
    从Zero到Hero,OpenAI重磅发布深度强化学习资源
    What-does-git-remote-and-origin-mean
    flink source code
    如何生成ExecutionGraph及物理执行图
    rocketmq 源码
    Flink source task 源码分析
    flink 获取上传的Jar源码
    fileupload
  • 原文地址:https://www.cnblogs.com/ttplearning/p/12384930.html
Copyright © 2011-2022 走看看