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

     
     
        
  • 相关阅读:
    实践:VIM深入研究(20135301 && 20135337)
    信息安全系统设计基础第十二周学习总结
    信息安全系统设计基础第五次实验报告 20135201&&20135306&&20135307
    信息安全系统设计基础第四次实验报告 20135201&&20135306&&20135307
    信息安全系统设计基础第三次实验报告 20135201&&20135306&&20135307
    信息安全系统设计基础第二次实验报告 20135201&&20135306&&20135307
    深入理解计算机系统家庭作业汇总 20135301&&20135328
    java 基本理论知识点
    使用DAO模式开发宠物管理系统
    java编程常用的快捷键
  • 原文地址:https://www.cnblogs.com/zhengwei-cq/p/9195125.html
Copyright © 2011-2022 走看看