c#的委托事件

news2024/7/6 1:23:26

声明一个委托

//声明一个委托,指定该委托的每个实例都包含一个方法的引用,方法必须带有一个Int参数,并返回Void
delegate void Add(int x);
//定义委托基本上是定义一个新类,所以可以再定义类的任何相同地方定义委托,可以添加Public,Private,Protected等
 delegate string GetString();

//委托的特征
//委托的类型是安全的,可以确保被调用的方法的签名是正确的,静态方法和实例方法都可以注册进委托

public class Test : MonoBehaviour
{
    private void Start()
    {
        int x=40;
        //委托在语法中总是接收一个参数的构造函数,这个参数就是属于引用类型的方法,这个方法必须匹配最初定义委托时的签名
        GetString mod = new GetString(x.ToString);
        GetString mod2 = new GetString(Go);
        //为了减少输入量,在需要委托实例的每个位置可以只传送地址的名称。只要编译器可以把委托实例解析为
        //特定类型,这个c#特性就是有效的,x.toString就是方法的地址
        GetString mod3 = x.ToString;
        print(mod());
        print(mod2());
        print(mod3());
    }
    public string Go()
    {
        return "3";
    }

简单的委托示例

class  Math
{
    public static double Mul(double value) => value * 2;
    public static double Square(double value) => value * value;
}
//定义一个委托
delegate double GetNum(double d);
public class Test : MonoBehaviour
{
    private GetNum[] nums =
    {
        Math.Mul,
        Math.Square
    };

    private void Start()
    {
        for (int i = 0; i < nums.Length; i++)
        {
            DisposeNum(nums[i], 10);
        }
    }


    static void DisposeNum(GetNum action, double value)
    {
        double result = action(value);
        print(result);
    }

Action和Func委托

 //Action表示引用一个Void返回类型的方法
     Action<int> _action; 
     Action<int, string, float> _action1;
     //允许调用带返回类型的方法
     private Func<int> _func; //不带参数返回Int的方法
     private Func<string, string, int> _func2; //带两个string参数,返回Int的方法
     private void Start()
     {
          _func = Go;
     }
     int Go()
     {
          return 1;
     }

多播委托,(连续播放委托,中途一个委托出错会导致不在继续播放,需要另一种写法)

在这里插入图片描述

  private Action go;

     private void Start()
     {
          go += One;
          go += Two;
          //go();  //直接调用,只会调用第一个方法,然后由于抛出错误,委托迭代中断
          Delegate[] des = go.GetInvocationList();   //打断连播,还会继续执行接下来的委托
          foreach (Action item in des)
          {
               try
               {
                    item();
               }
               catch (Exception e)
               {
                    Console.WriteLine(e);
               }
          }
     }

     public void One()
     {
          Debug.Log("One");
          throw new Exception("Error in one");
     }
     public void Two()
     {
          Debug.Log("Two");
     }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/899465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Leetcode】103.二叉树的锯齿形层序遍历

一、题目 1、题目描述 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[20,9],[15,7]]示例2: 输入:root = [1] 输…

response-headers,reqqust-headers 请求头大部分字段介绍以及总结

http标头的一些字段的介绍以及使用 公司大下周&#xff0c;趁着摸鱼的时间总结一下大部分标头的大概意思和用法。不是很全&#xff0c;但是大部分应该都在平时需要知道的一些标头的用意 1.Access-Control-Allow-Origin 通过设置这个属性表示可以被哪些网站进行跨域资源共享 …

MyBatis的入门级环境搭建及增删改查,详细易懂

目录 一.mybatis的简介 二.MyBatis的环境搭建 2.1 导入pom依赖 2.2 数据库文件导入连接 2.3 修改web.xml文件 2.4 安装插件 2.5 配置文件 2.5.1 mybatis.cfg.xml文件 2.5.2 generatorConfig.xml文件 2.6 最后测试生成代码 三.MyBatis的增删改查 3.1 写service类&#xff…

Linux服务器性能、网络监控

参考 1.Linux监控指令 2.Linux服务器上监控网络带宽的18个常用命令和linux带宽流量监控查看工具 3.Linux top指令 文章目录 Linux 命令行工具总体性能监控网络监控网络监控iftop磁盘IO使用情况和性能分析 iostat Linux 命令行工具 总体性能监控 $ top直接输入 top&#xff0c;…

msvcp120.dll丢失的解决方法,常见的解决dll问题方法

最近在使用一款常用的图像处理软件时&#xff0c;遇到了一个问题。每次我尝试打开软件时&#xff0c;都会弹出一个错误提示窗口&#xff0c;告诉我缺少msvcp120.dll文件。 系统提示无法启动此程序&#xff0c;因为计算机中丢失msvcp120.dll&#xff0c;尝试重新安装该程序以解…

C++头文件

C头文件 一般头文件特殊头文件windows.hbits/stdc.h 一般头文件 C头文件是一种包含预定义函数、类和变量声明的文件。它们通常用于在源代码文件中引入外部库或模块的功能。 头文件的作用是提供程序所需的声明信息&#xff0c;以便在源代码文件中使用这些声明。当你在源代码文…

【数据结构OJ题】设计循环队列

原题链接&#xff1a;https://leetcode.cn/problems/design-circular-queue/ 1. 题目描述 2. 循环队列的概念和结构 为充分利用向量空间&#xff0c;克服"假溢出"现象的方法是&#xff1a;将向量空间想象为一个首尾相接的圆环&#xff0c;并称这种向量为循环向量。…

面试之快速学习STL-容器适配器

1. 容器适配器 简单的理解容器适配器&#xff0c;其就是将不适用的序列式容器&#xff08;包括 vector、deque 和 list&#xff09;变得适用。 注意&#xff1a;默认使用的基础容器不代表一定只能用它&#xff0c;比如queue可以用deque&#xff0c;list。 如果你希望你的qu…

VS 运行编译通过,但代码下方 标红波浪线 问题

解决办法一&#xff1a;重新扫描 一次 解决方案&#xff0c; 就会去掉红线 方法2&#xff1a; VS 运行编译通过&#xff0c;但代码标红波浪问题解决办法_vs代码下面有波浪线_Start_Or_Out的博客-CSDN博客

算法与数据结构(五)--树与二叉查找树

符号表的增删查操作&#xff0c;随着元素个数N的增多&#xff0c;其耗时也是线性增多的&#xff0c;时间复杂度都是O(n)&#xff0c;为了提高运算效率&#xff0c;我们学习树这种数据结构。 目录 一.树的基本定义 二.树的相关术语 三.二叉树的基本定义 四.二叉树的链表实现…

Linux 进程间通信——消息队列

一、消息队列的原理 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型&#xff0c;接收进程可以独立接收含有不同类型值得数据库。 消息实际上是一个数据块&#xff0c;这个数据块是一个结构体&#xff0c;结构体由自己命名。消…

跨境电商平台(例如阿里巴巴、虾皮)的商品数据如何收集?

跨境电商是指通过互联网&#xff0c;以跨越国家或地区边界的方式进行电子商务交易的商业行为。传统的电子商务通常是在同一国家或地区内进行&#xff0c;而跨境电商则侧重于跨国贸易。跨境电商通过在线平台&#xff08;如阿里巴巴、亚马逊等&#xff09;或第三方服务商&#xf…

智慧工地平台工地人员管理系统 可视化大数据智能云平台源码

智慧工地概述&#xff1a; 智慧工地管理平台是以物联网、移动互联网技术为基础&#xff0c;充分应用大数据、人工智能、移动通讯、云计算等信息技术&#xff0c;利用前端信息采通过人机交互、感知、决策、执行和反馈等&#xff0c;实现对工程项目內人员、车辆、安全、设备、材…

Spark 为什么比 MapReduce 快100倍?

文章目录 1. 内存计算与磁盘刷写1.1 MapReduce 的 Shuffle 需要频繁 IO1.2 Spark 计算走 IO 少 2. 进程和线程2.1 基于进程的 MapReduce2.2 基于线程的 Spark2.3 基于进程 VS 基于线程 3. 持久化缓存机制4. 数据格式和序列化 通常我们认为 Spark 引擎是基于内存进行计算&#x…

【STL】-- 知识总结

目录 STL六大组件介绍 容器 序列式容器 vector list 知识点考察 关联式容器 map/set set介绍 set常用接口 map介绍 map常用接口 底层结构&#xff1a;红黑树 unordered_map/set unordered_map/set介绍 底层结构&#xff1a;哈希表 知识考察 适配器 stack qu…

【ESP系列】ESP01S官方MQTT案例实验

前言 偶然发现安信可官网有ESP01S和STM32连接TCP和MQTT的案例。弄了一两天&#xff0c;把我使用的流程在这里记录下。MQTT的固件一定要烧录进去&#xff0c;默认固件是没有MQTT相关的AT指令的。 环境 Keli5&#xff0c;STM32F103C8T6 官方Keil工程链接&#xff1a;ESP8266的S…

虫情测报灯

在农业生产过程中&#xff0c;农作物的虫害问题永远都是放在首位的。随着现代生活科技的发展和社会进步&#xff0c;人们对物质也有了新的要求。伴随农作物品种的增加&#xff0c;农药和化肥的使用也在导致农业虫害问题日益加剧&#xff0c;在这种不良的耕作状态下&#xff0c;…

JSP介绍

目录 获取表单提交的数据 请求对象 request response 在请求中存取属性 转发与重定向 session cookie pageContext对象 jsp 动作标签 JSP内置对象是什么: 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使…

JavaWeb 速通Listener

目录 一、Listener快速入门 1.Listener简介 : 2.Java事件处理机制 : 二、ServletContextListener 1.作用 : 2.相关方法 : 3.应用实例 : 三、ServletContextAttributeListener 1.作用 : 2.相关方法 : 3.应用实例 : 四、HttpSessionListener 1.作用 : 2.相关方法 :…

KeilMDk软仿真设置_STM32F03C8

1、KeilMDK软仿真的价值 (1)在没有硬件的情况下进行程序的编写调试。 (2)避免频繁的下载程序&#xff0c;延长单片机Flash寿命。 2、软仿真配置。 (1)打开Keil工程。 (2)点击“Options for Target ***”&#xff0c;如下图所示。 (3)点击“Debug”。 (4)进行如下配置。 U…