zoukankan      html  css  js  c++  java
  • 如何理解事件和委托

    我喜欢将书中的知识看懂后形成个人的理解:

    一、你如何理解委托

            如果我们不理解决委托,那应该都理解类,那我们就从类角度来看看什么是委托。

            在我看来类和委托是同一级别的东西,类它对具体的实例进行了抽象,也就是它确定了实例的基本骨架,而委托是对具体方法的抽象,它定义了具体方法的基本骨架,和类一样都是通过new 方法进行实例化,

            只是创建委托实例时要一个调用的目标方法。

         下面是委托的使用:

    public delegate void myDelegate(string str); 
    public static void HellowChinese(string strChinese) 
        Console.WriteLine("Good morning," + strChinese); 
        Console.ReadLine(); 
       
    myDelegate d = new myDelegate(HellowChinese); 
    d("Mr wang");
     
    二、你如何理解事件
          如果我们不理解事件,那我们应该理解类中的字段和属性,那我们就从字段和属性角度来理解事件
           我们都知道对类中属性的赋值和取值就是调用get和set方法对字段进行操作,同样订阅和取消订阅一个事件时和属性的情况一样,实际是在调用add和remove方法,我们是对过+=和-=运算符使用委托类型的字段。
           “事件”存在的的理由和“属性”差不多,它们添加了一个封装层,实现发布、订阅模式。通常,我们不希望其它代码随意更改一个事件的处理程序,当然类能通过添加方法的方式来提供额外的访问。
          声明一个事件后编译器会将声明转换成一个具有默认add emove实现的事件和一个私有委托类型的字段,类内的代码能看见字段,类外的代码只能看见事件。
         这样一来,表面上似乎能调用一个事件,,实际上是调用存储在字段中的委托实例。
        也就是说事件不是委托实例,它只是成对的add/remove方法,类似于属性的取值和赋值方法。
       下面是事件的使用:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Example_EventTest
    {
        class Judgment
        {
            //定义一个委托
            public delegate void delegateRun();
            //定义一个事件
            public event delegateRun eventRun;
            //引发事件的方法
            public void Begin()
            {
                eventRun();//被引发的事件
            }
        }
        class RunSports
        {
            //定义事件处理方法
            public void Run()
            {
                Console.WriteLine("运动员开始比赛");
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                RunSports runsport = new RunSports();//实例化事件发布者
                Judgment judgment = new Judgment();//实例化事件订阅者
                //订阅事件
                judgment.eventRun+=new Judgment.delegateRun(runsport.Run);
                //引发事件
                judgment.Begin();
                Console.ReadKey();
            }
        }
    }

     
     
        
  • 相关阅读:
    Java JMX 监管
    Spring Boot REST(一)核心接口
    JSR 规范目录
    【平衡树】宠物收养所 HNOI 2004
    【树型DP】叶子的颜色 OUROJ 1698
    【匈牙利匹配】无题II HDU2236
    【贪心】Communication System POJ 1018
    【贪心】Moving Tables POJ 1083
    Calling Extraterrestrial Intelligence Again POJ 1411
    【贪心】Allowance POJ 3040
  • 原文地址:https://www.cnblogs.com/zhengwei-cq/p/9195125.html
Copyright © 2011-2022 走看看