• 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();
       
        }
    
    }
    

      

  • 相关阅读:
    苹果的HomeKit协议
    广州出游计划
    Qt学习博客推荐
    Log4Qt使用(三)在DailyRollingFileAppender类中增加属性mMaxBackupIndex
    QT中关于窗口全屏显示与退出全屏的实现
    键盘事件-----按下回车键则触发事件
    窗体显示/编码设置/开机启动/文件选择与复制/对话框等
    设置系统日期时间
    输入内容, 列出可选的项: QComboBox
    如何根据安装时缺失的文件查找对应的包
  • 原文地址:https://www.cnblogs.com/ttplearning/p/12384930.html
Copyright © 2020-2023  润新知