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部分, 固有部分写死, 不固定部分开放接口,外部可随意扩展

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

  • 相关阅读:
    《单元测试之道C#版——使用NUnit》测试哪些内容 RightBICEP
    《领域驱动设计》读书笔记(三) 消化知识
    法雷数列浅谈 RL
    四种常用最短路径算法模板 RL
    PIG 学习笔记1
    readme
    隐藏系统队伍框架
    关于时间的一些函数
    两个作用相同的宏.
    自动拾取确认,自动复活确认
  • 原文地址:https://www.cnblogs.com/xtxtx/p/9149508.html
Copyright © 2011-2022 走看看