用《斗破苍穹》的视角打开C#委托2 委托链 / 泛型委托 / GetInvocationList

news2024/11/17 5:59:45

委托链

  • 经过不懈地努力,我终于成为了斗师,并成功掌握了两种斗技——八极崩和焰分噬浪尺。
  • 于是,我琢磨着,能不能搞一套连招,直接把对方带走。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace FrameworkDemo
{
    class Program
    {
        delegate void 攻击委托类型(string a);

        static void 八极崩(string a) {
            Console.WriteLine("八极崩");
        }
        static void 焰分噬浪尺(string a)
        {
            Console.WriteLine("焰分噬浪尺");
        }
        static void Main(string[] args)
        {
            // 创建委托链
            攻击委托类型 一套连招 = new 攻击委托类型(八极崩);
            // 攻击委托类型 一套连招 = 八极崩;   // 也可以这样写
            一套连招 += 焰分噬浪尺;
            // 启动委托
            一套连招("吃我一记连招");
            Console.ReadLine();
        }
    }
}

请添加图片描述

委托链返回值(GetInvocationList)

  • 这连招确实是打出来了,但是我怎么知道我打出了多少伤害呢?所以我要想办法接受这套输出的反馈。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace FrameworkDemo
{
    class Program
    {
        delegate int 攻击委托类型(string a);

        static int 八极崩(string a) {
            Console.WriteLine("八极崩");
            return 330;
        }
        static int 焰分噬浪尺(string a)
        {
            Console.WriteLine("焰分噬浪尺");
            return 660;
        }
        static void Main(string[] args)
        {
            // 创建委托
            攻击委托类型 一套连招 = 八极崩;
            一套连招 += 焰分噬浪尺;
            // 获取委托链
            Delegate[] delList = 一套连招.GetInvocationList();
            // 遍历委托链
            for (int i = 0; i < delList.Length; i++) {
                攻击委托类型 del = (攻击委托类型)delList[i];
                // 一次调用委托并获取返回值
                int result = del("吃我一套连招");
                Console.WriteLine($"攻击伤害:{result}");
            }
            Console.ReadLine();
        }
    }
}

请添加图片描述

泛型委托

  • 这时候,问题就来了,我每创建一个委托,岂不是都要先定义一个委托类型,然后再创建一个委托实例,假设这个委托类型只用一次,那我岂不是要在我的类里面定义一大堆的委托?
  • 于是乎,就出现了一系列的泛型委托。
  • Action是不带有返回值的泛型,而Func具有返回值。
using System;

namespace FrameworkDemo
{
    class Program
    {
        static void 八极崩() {
            Console.WriteLine("八极崩");
        }
        static void 焰分噬浪尺(string a)
        {
            Console.WriteLine("焰分噬浪尺");
        }
        static string 佛怒火莲(string a) {
            Console.WriteLine("佛怒火莲");
            return "成功击杀敌军!";
        }

        static void Main(string[] args)
        {
            // 不带返回值的委托
            Action 攻击委托1 = 八极崩;
            攻击委托1();
            Action<string> 攻击委托2 = 焰分噬浪尺;
            攻击委托2("吃我一击!");
            // 带返回值的委托
            // <>中的最后一个参数是函数的返回值类型
            Func<string, string> 攻击委托3 = 佛怒火莲;
            string result = 攻击委托3("绝杀");
            Console.ReadLine();
        }
    }
}

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

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

相关文章

项目环境搭建

注册中心网关配置 spring:cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:[/**]:allowedHeaders: "*"allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTIONroutes:# 平台管理- id: useruri: lb://…

基于SpringBoot的植物健康系统

目录 前言 一、技术栈 二、系统功能介绍 系统首页 咨询专家 普通植物检查登记 珍贵植物检查登记 植物救治用料登记 植物救治材料管理 植物疾病案例管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&am…

使用MATLAB进行傅里叶变换

1、定义 T1;% 周期0-1 N20;% 最大谐波 k-N:N;% -20:20——-20表示a_(20)e^(j*20*w0*t) N1length(k);%N141 % ceil(N1/2)21%即21是N1的中位数tlinspace(0,T,100); Ntlength(t); ttlinspace(-4*T,4*T,1024); Nttlength(tt);2、原函数 w02*pi/T; % 0-T xt(t>T/4).* 1.0; fig…

支付宝sdk商户私钥 如何生成?

1、先下载密钥工具 https://opendocs.alipay.com/isv/02kipk 2、安装后生成密钥 3、配置密钥 4、将工具生成的公钥复制进去生成公钥 简单来说就是私钥是用工具生成的&#xff0c;不会在页面上显示 商户私钥 支付宝公钥

Python-Scrapy框架(框架学习)

一、概述 Scrapy是一个用于爬取网站数据的Python框架&#xff0c;可以用来抓取web站点并从页面中提取结构化的数据。 基本组件&#xff1a; 引擎(Engine)&#xff1a;负责控制整个爬虫的流程&#xff0c;包括调度请求、处理请求和响应等。 调度器(Scheduler)&#xff1a;负责…

基于SSM的资源共享平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

基于YOLOv8模型的车载摄像头下车辆目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的车载摄像头下车辆目标检测系统可用于日常生活中检测与定位车辆目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算…

源码, AST, IR, CFG之间的关系梳理

在上一篇文章“代码检查过程中为什么需要涉及到编译呢&#xff1f;”中&#xff0c;有提到SAST代码检查工具里编译过程会经历哪些阶段&#xff0c;里面有提到&#xff1a; 一般来说&#xff0c;完整的编译过程会经历&#xff1a;对源代码进行词法、语法、语义的分析&#xff0c…

一个爱国者的润学日记-十月

首先需要科学的准备面试和润。如何进行科学的准备工作呢&#xff1f; 高效的按照面试考察内容进行针对性训练&#xff0c;按 Machine-learning-interview准备保证处于专注的心态&#xff0c;如今互联网娱乐发达&#xff0c;之前即使比赛时我也是一边比赛一边看视频。之后准备面…

10.07hw

int main() {string str;cout << "输入字符串:";getline(cin,str);int size str.size();int big 0;int small 0;int num 0;int space 0;int other 0;for(int i0;i<size;i){if(str[i]<Z&&str[i]>A){big;}else if(str[i]<z&&st…

黑客帝国代码雨

黑客帝国代码雨奉上,之前一直想写,但一直没抽出时间来,今天把他写了,也算了了装心事 效果图如下 原理就不讲了,代码写的很清楚而且不长 有不懂的评论区问我就好 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">&l…

UniApp创建项目HelloWorld

浏览器预览效果镇楼 普通项目创建 点击创建完成后&#xff0c;就如下所示 确实和微信小程序开发差不多。只是稍微换了一个名字的概念了&#xff0c;这个就是开发嘛&#xff0c;不要过于纠结概念性东西。开发开发&#xff0c;开了就知道怎么发了&#xff1f; 或许是 反正write就…

vue 项目打包性能分析插件 webpack-bundle-analyzer

webpack-bundle-analyzer 是 webpack 的插件&#xff0c;需要配合 webpack 和 webpack-cli 一起使用。这个插件可以读取输出文件夹&#xff08;通常是 dist&#xff09;中的 stats.json 文件&#xff0c;把该文件可视化展现&#xff0c;生成代码分析报告&#xff0c;可以直观地…

【赠书活动】浅谈C#中垃圾回收机制

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

初识链表(7.25)

前面我们学习了顺序表&#xff0c;但顺序表其实存在一些问题 1. 中间/头部的插入删除&#xff0c;时间复杂度为O(N) 2. 增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗&#xff08;尤其是异地扩容&#xff09;。 3. 增容一般是呈2倍的增长&am…

大语言模型之十六-基于LongLoRA的长文本上下文微调Llama-2

增加LLM上下文长度可以提升大语言模型在一些任务上的表现&#xff0c;这包括多轮长对话、长文本摘要、视觉-语言Transformer模型的高分辨4k模型的理解力以及代码生成、图像以及音频生成等。 对长上下文场景&#xff0c;在解码阶段&#xff0c;缓存先前token的Key和Value&#…

数据结构(2-5~2-8)

2-5编写算法&#xff0c;在单链表中查找第一值为x的结点&#xff0c;并输出其前驱和后继的存储位置 #include<stdio.h> #include<stdlib.h>typedef int DataType; struct Node {DataType data; struct Node* next; }; typedef struct Node *PNode; …

【高并发优化手段】基于Springboot项目

文章目录 一、概述二、服务器配置1. 选择合适的机器2. 配置服务器参数&#xff08;1&#xff09;TCP网络层参数如何配置 &#xff08;2&#xff09;文件系统参数仅根据硬件配置&#xff0c;估算机器的最大性能修改配置 &#xff08;3&#xff09;内存参数 三、Tomcat配置1. 调整…

11.2 基本电路和基本分析方法

一、基本电路 电路类型电路名称特点和典型功能指标参数或功能描述方法基本放大电路共射放大 ∣ A ˙ ∣ |\dot A| ∣A˙∣大&#xff1b;适用于小信号电压放大 A ˙ u \dot A_u A˙u​、 R i R_i Ri​、 R o R_o Ro​、 f L f_L fL​、 f H f_H fH​、 f b w f_{bw} fbw​共集…

echarts的bug,在series里写tooltip,不起作用,要在全局先写tooltip:{}才起作用,如果在series里写的不起作用就写到全局里

echarts的bug&#xff0c;在series里写tooltip&#xff0c;不起作用&#xff0c;要在全局先写tooltip&#xff1a;{show:true}才起作用&#xff0c;如果在series里写的不起作用就写到全局里 series里写tooltip不起作用&#xff0c;鼠标悬浮在echarts图表上时不显示提示 你需要…