首页 > 其他分享 >11.13闲话-委托与事件

11.13闲话-委托与事件

时间:2024-11-13 20:30:34浏览次数:1  
标签:name 委托 闲话 void greetManager 11.13 Greet Delegate public

11.13闲话-委托与事件

推荐

前言

其实委托与事件并不是必须品,如果你的码力超群,可以不使用oop、函数便可以切掉猪国杀,那完全不用学习委托与事件。

其作用就像函数、封装类似,为节省大量的无意义代码而诞生。

前言

先考虑为什么使用函数,第一点就是因为我们会多次使用相同的代码,第二点便是我们会使用相似的代码。

而委托事件就非常类似第二点。

不同的是我们会传入一个函数。

考虑我们现在有一个函数,调用会向控制台打印欢迎语。

很显然我们可以直接调用输出。

但现在我们的程序需要国际化,让我们的shit传遍天下

所以要支持多语言。

我们肯定可以暴力使用if判断不同语言。

但假如我们需要扩展,显然这么做就会使得代码过难维护。

但类比函数的思想,我们为什么不直接把函数当做参数传入另一个函数?

使用

Part.1 委托

public delegate void Greeting_Delegate(string name);

需要注意的是,声明的类型和参数要与函数一致

public void Greet_Others(string name, Greetint_Delegate Greet)
{
    Greet(name);
}
public void Greet_English(string name)
{
    DeBug.Log("Hello, " + name); // unity 调试方式
}

public void Greet_Chinese(string name)
{
    DeBug.Log("你好, " + name);
}

public static void Main()
{
    Greet_Others("Shadow", Greet_English);
    Greet_Others("涛哥", Greet_Chinese);
}

但是,只能这么做有点过于局限,所以,还可以这么用。

public class Greeting_Manager()
{
    public Greet_Delegate Delegate;

    public void Greet_Others(string name)
    {
        if (Delegate != null)
        {
            Delegate(name);
        }
    }
}

public static void Main()
{
    Greeting_Manager greetManager;
    greetManager.Delegate = Greet_English;
    greetManager.Delegate += Greet_Chiese;

    greetManager.Greet_Others("涛哥");

    Delegate("涛哥");
}

但到这总还是感觉缺点什么,为什么呢?

事件

一切都十分完美,但是其缺少了一定的权限,也就是我们的用户可以肆意的修改我们的委托,所以出现了事件。

事件可以使我们的操作只能 += (添加事件) 或 -= (删除事件)。

public class Greeting_Manager()
{
    public event Greet_Delegate Delegate;

    public void Greet_Others(string name)
    {
        if (Delegate != null)
        {
            Delegate(name);
        }
    }
}

public static void Main()
{
    Greeting_Manager greetManager = new Greeting_Manager();
    greetManager.Delegate += Greet_English;
    greetManager.Delegate += Greet_Chiese;

    greetManager.Greet_Others("涛哥");

    Delegate("涛哥");
}

Observer 设计模式

参考

p by wkh2008 && Qyun

标签:name,委托,闲话,void,greetManager,11.13,Greet,Delegate,public
From: https://www.cnblogs.com/QEDQEDQED/p/18544745

相关文章

  • 闲话 11.13
    On17:20:锣鼓似了,遂来乱写。上午早上来了先改昨天T4,会了打的就是快,吃完饭没多久A了。然后学考,左边两个化奥的,左前方CTH,正前方HDK,右边9G。进场发现这个挡板一点意义没有,根本挡不住。然后开做后发现,由于手必须要操作鼠标所以身体不得不前倾,这下看懂挡板的作用了。开题,直......
  • 2024.11.13 1902版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • 2024.11.13 1825版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • CW 11.13 模拟赛 T3 大方和小方
    算法可以看出来是组合数学,但是考场上时间不够+本身也没做过组合数学,放弃了经过人类智慧的推导由\(\rm{Subtask}1\)可得基础柿子令$a=b_2-d_1,b=a_2-c_1$插空法可知答案为\(a+b\choosea\)代码略总结注意组合数学的\(\sum\)有些时候可以化......
  • CW 模拟赛 11.13 个人记录
    T1算法暴力暴力思路是显然的,观察到并查集可以\(\mathcal{O}(n\logn)\)的维护题目中求的信息对于\(50\%\)的数据显然可以通过耗时\(10\rm{min}\),正常正解暴力疑似就是正解?????代码这个题只要挂了我就趋势,但是看这样子来说应该是\(T1\)放了简单题不挂......
  • [2024.11.13]NOIP 模拟赛
    T1怎么自然溢出被卡了啊(upd:不是哈希被卡了,是大数据里塞小数据被坑了)T2怎么看不清题目要求啊T3怎么都记得欧拉定理啊T4怎么暴力全机房就我一个写挂了啊……赛时T1题目上说是背包,但是数据范围给到了\(2^{18000}\),所以一眼是结论题。题目上\(a_i\)全部互质的条件很独特,所以我......
  • .NET Core 委托底层原理浅谈
    简介.NET通过委托来提供回调函数机制,与C/C++不同的是,委托确保回调是类型安全,且允许多播委托。并支持调用静态/实例方法。简单来说,C++的函数指针有如下功能限制,委托作为C#中的上位替代,能弥补函数指针的不足。类型不安全函数指针可以指向一个方法定义完全不同的函数。在编译期......
  • 11.10闲话-柏林噪声(有图)
    柏林噪声参考博客&&代码出处前言柏林噪声主要用于生成平滑的地形、特效等关于为什么要用柏林噪音,单纯的随机并不能适用于生成地形等场合,那会使得效果十分奇怪,忽高忽低,毫无美感而柏林噪音就像名字般,靠模拟噪声来实现平滑柏林噪音可以有多维,其本质都是一样的例如:2D可用于......
  • 闲话 11.8
    别问为啥这么晚才写,因为一天都不知道在干啥,要寄的节奏。11.7晚轮到CTH写字Ratio:程立雪?啥意思,程门立雪?门呢?CTH:让我创掉了。上午把昨天晚上想到的题出了出来,见此。由于5k们要打nfls,所以只能找团委了,过了hack之后直接拿\(\mathcal{O(n^2)}\)出到了\(10^5\)......
  • 【闲话】全知
    大抵是有这么一位全知监视观察着这个世界的一草一木,他被教导不对蝼蚁般的生灵的名义施与怜悯,也不应插手凡人的命运,而是与世无争、退隐闲境。他应做的只有监视观察,品味亦或是玩弄创世神早已安排好的一切,亲眼见证着世界一次次新生后的毁灭降临。他自己也无法摆脱这......