zoukankan      html  css  js  c++  java
  • 学习笔记: 委托解析和封装,事件及应用

    1. 委托的本质: 是一个类, 继承自 System.MulticastDelegate 里面内置了几个方法

    Noreturn委托 编译后的IL

     

    1. 多播委托的 举例

            //猫叫一声 触发一系列后续动作
            //多个 指定动作 正式不稳定原因, 封装出去 甩锅

    public class Cat
         {
             public int MyProperty { get; set; }
             public void Miao()
             {
                 Console.WriteLine("{0} miao", this.GetType().Name);

                new Mouse().Run();
                 new Baby().Cry();
                 new Dog().Wang();
             }

            //猫叫一声 触发一系列后续动作
             //多个 指定动作 正式不稳定原因, 封装出去 甩锅

            public void MiaoNew(MiaoDelegate miaoDelegate)
             {
                 Console.WriteLine("{0} MiaoNew", this.GetType().Name);

                if (miaoDelegate != null)
                     miaoDelegate.Invoke();
             }
         }

        public delegate void MiaoDelegate();
         class Mouse
         {
             public void Run()
             {
                 Console.WriteLine("{0} run", this.GetType().Name);
             }
         }

        class Baby
         {
             public void Cry()
             {
                 Console.WriteLine("{0} cry", this.GetType().Name);
             }
         }

        class Dog
         {
             public void Wang()
             {
                 Console.WriteLine("{0} Wang", this.GetType().Name);
             }
         }

    static void Main(string[] args)
    {

        Cat cat = new Cat();
         cat.Miao();

        var miaoDelegate = new MiaoDelegate(new Mouse().Run);
         miaoDelegate += new MiaoDelegate(new Baby().Cry);
         miaoDelegate += new MiaoDelegate(new Baby().Cry);
         miaoDelegate += new MiaoDelegate(new Dog().Wang);

        cat.MiaoNew(miaoDelegate);
    }

    2. 对事件的理解

    事件 : 带有event关键字的委托的实例, event可以限制变量被 外部调用/直接赋值

    ChildClass:Cat 也不可以对cat中的 event进行操作

    image

    image

    从 IL中可以看出  委托实例是public字段, 而事件是 private字段, 自然外部不可调用了

    image

    委托和事件的区别与联系?

    委托的本质 是类, 就是一个类型,比如 Student类

    事件 是委托类型的一个实例 比如 同学A 是student的一个实例

    事件: 可以吧一堆可变的动作/行为 封装出去, 交给外部制定, 预定义一样,

            程序设计时候, 可以把程序分为2部分, 固有部分写死, 不固定部分开放接口,外部可随意扩展

    框架: 完成固定/通用部分, 把可变部分留出扩展点, 支持自定义

  • 相关阅读:
    逻辑学的基本运算
    第一性原理:First principle thinking是什么?
    人类认识的基本技能
    编程的本质:简化+抽象+再现
    区块链
    信号、系统、传递、树
    MVVM
    数据驱动 状态驱动
    事件与状态机 事件驱动编程
    数据一致性举例:登录系统
  • 原文地址:https://www.cnblogs.com/xtxtx/p/9149508.html
Copyright © 2011-2022 走看看