通俗易懂大白话之C#委托与事件实例

摘要:
使用委托和事件的实施方法:首先,定义三类:刘备、关羽和张飞:刘备有破杯的委托和事件,以及破杯的方法;关羽和张飞有杀人的方法;Publicclass刘蓓{publicdelegatebool扔杯委托;publicevent扔杯委托扔杯事件;publicvoid扔杯方法(){if(扔杯事件!=null)扔杯事件}}公开课关羽{publicpool杀了{Console.WriteLine(“关羽带着300名剑客从北门杀了!

有关委托和事件的文章已经有很多, 之前看过一篇讲的实例比较形象, 因此借鉴并加以改进一下, 希望能够帮助还没有过这道坎的同学;

借鉴文章: https://www.cnblogs.com/yinqixin/p/5056307.html

本文没有任何概念介绍,旨在帮助同学们快速用上委托和事件,越过这道坎。

应用场景举例:    

刘备设鸿门宴, 吩咐关羽和张飞各自带队埋伏在门外,  刘备摔杯为号, 关羽和张飞则带队杀出;

关羽和张飞杀出的具体过程, 他们自己实现即可.

但刘备会不会摔杯, 什么时候摔杯 刘备自己也不知道..得看情况..

所以当然不能用传统方式, 在刘备摔杯的方法里面调用关羽和张飞的杀出方法,

如果刘备(BOSS)临时变卦, 要多安排赵云,马超,黄忠等等众多将领在门外呢?

那刘备的摔杯方法岂不是要调用所有将领的杀出方法?

这样写代码要传递众多将领对象, 刘备的摔杯方法会进行无尽的修改和完善,显然不是我们所希望的。

使用委托和事件的实现方式:

首先定义刘备,关羽,张飞3个类:

刘备有摔杯的委托和事件, 以及摔杯方法;

关羽和张飞则有杀出方法;

通俗易懂大白话之C#委托与事件实例第1张通俗易懂大白话之C#委托与事件实例第2张
public class 刘备
    {
        public delegate bool 摔杯委托(string str);
        public event 摔杯委托 摔杯事件;

        public void 摔杯方法()
        {
            if (摔杯事件 != null)
                摔杯事件("猛猛的摔杯 (只是示例个参数)");
        }
    }

    public class 关羽
    {
        public bool 杀出(string str)
        {
            Console.WriteLine("关羽带300刀斧手从北门杀出!");
            return true;
        }
    }

    public class 张飞
    {
        public bool 杀出(string str)
        {
            Console.WriteLine("张飞带300刀斧手从南门杀出!");
            return true;
        }
    }
View Code

那么为了方便大家理解注册事件,  也就是关羽和张飞接受刘备的摔杯为号的约定, 我们先这样写:

通俗易懂大白话之C#委托与事件实例第3张通俗易懂大白话之C#委托与事件实例第4张
static class Program
    {
        static void Main()
        {
            刘备 lb = new 刘备();
            关羽 gy = new 关羽(lb);
            张飞 zf = new 张飞(lb);
            //分别注册事件
            lb.摔杯事件 += gy.杀出;
            lb.摔杯事件 += zf.杀出;
            //刘备摔杯
            lb.摔杯方法();
        }
    }
View Code

最终完整代码如下:

(下面代码注册事件改为在对象内部实现)

通俗易懂大白话之C#委托与事件实例第5张通俗易懂大白话之C#委托与事件实例第6张
using System;

namespace Test
{
    static class Program
    {
        static void Main()
        {
            刘备 lb = new 刘备();
            关羽 gy = new 关羽(lb); //可以理解为, 刘备与关羽约定好摔杯杀出, 然后关羽自己注册事件
            张飞 zf = new 张飞(lb); //同上
            //刘备摔杯
            lb.摔杯方法();
        }
    }

    public class 刘备
    {
        public delegate bool 摔杯委托(string str);
        public event 摔杯委托 摔杯事件;

        public void 摔杯方法()
        {
            if (摔杯事件 != null)
                摔杯事件("猛猛的摔杯 (只是示例个参数)");
        }
    }

    public class 关羽
    {
        public 关羽(刘备 lb)
        {
            lb.摔杯事件 += 杀出;
        }

        public bool 杀出(string str)
        {
            Console.WriteLine("关羽带300刀斧手从北门杀出!");
            return true;
        }
    }

    public class 张飞
    {
        public 张飞(刘备 lb)
        {
            lb.摔杯事件 += 杀出;
        }

        public bool 杀出(string str)
        {
            Console.WriteLine("张飞带300刀斧手从南门杀出!");
            return true;
        }
    }
}
View Code

大家再想一想, 如果还有赵云,马超,黄忠等等更多将领呢?

程序拓展也非常方便, 定义好新将领的类并实现杀出方法即可, 和关羽张飞代码类似;

使用设计模式的话,  可以建立一个将领的父类, 实现基本的杀出方法. 如果个别将领有特别的杀出方法, 重写杀出方法即可.

如果有不对的地方欢迎指出 

免责声明:文章转载自《通俗易懂大白话之C#委托与事件实例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue中的父子组件之间的通信--新增、修改弹框数据上链——区块链相关概念下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# 通过ServiceStack 操作Redis——Set类型的使用及示例

Set:用哈希表来保持字符串的唯一性,没有先后顺序,存储一些集合性的数据 /// <summary> /// Set:用哈希表来保持字符串的唯一性,没有先后顺序,存储一些集合性的数据 /// 1.共同好友、二度好友 /// 2.利用唯一性,可以统计访问网站的所有独立 IP /// </summar...

java 策略模式

定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。 类型:行为类模式 类图:        策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换。在前面说过的行为类模式中,有一种模式也是关注对算法的封装——模版方法模式,对照类图可以看到,策略模式与模版方法模式的区别仅仅是多了一个单独的封装...

战棋游戏三国志英杰传分析

欢迎转载,请保留出处:http://www.cnblogs.com/wellbye/ 游戏简介: 扮演刘备方,从讨董卓开始,直到伐魏成功,共50多个战斗关卡。 剧情基本上是固定封闭式的(相对于三国志系列自由发展的开放模式),即只能按照预设流程推进,一关接一关往下打。 剧情有部分支线,如有些关卡之间是二选一,另外有些关卡可改变史实,如关羽和庞统可存活,最大的...

《三国演义》——词云制作

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Mon Apr 6 22:45:36 2020 4 5 @author: 49594 6 """ 7 8 # coding:utf-8 9 10 11 from wordcloud import WordCloud 12 import...

【杂谈】二十四史箴言

过而不改,是谓过矣。  ---------汉书 先发制人,后发制于人。---------汉书 知足不辱,知止不殆。   ----------汉书 百里不同风,千里不同俗。   ------------汉书 不汲汲于富贵,不戚戚于贫贱。   -------------汉书 事不当时固争,防祸于未然。    --------------汉书 难得而易失也,时也...