当前位置: 首页 > news >正文

用《斗破苍穹》的视角打开C#委托2 委托链 / 泛型委托 / 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 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.lryc.cn/news/187851.html

相关文章:

  • 唐老师讲电赛
  • [ICCV-23] DeformToon3D: Deformable Neural Radiance Fields for 3D Toonification
  • 配置Hive使用Spark执行引擎
  • 基于FPGA的视频接口之千兆网口(五应用)
  • 车载开发所学内容,有哪些?程序员的转岗位需求
  • VSCode Intellij IDEA CE 数据库连接
  • 直流无刷电机开发应用
  • c 语言基础题目:PTA L1-030 一帮一
  • 网工内推 | base郑州,上市公司,最高15薪,五险一金全额缴
  • 求后缀表达式的值
  • 【FISCO-BCOS】十七、角色的权限控制
  • vue怎样封装接口
  • Typescript 笔记:函数
  • Axios 封装
  • CocosCreator 面试题(一)Javascript的垃圾回收机制
  • 【计算机网络】UDP协议编写群聊天室----附代码
  • Java架构师高并发架构设计
  • 【客观赋权法1】熵权法(MATLAB全代码)
  • “注释: 爱恨交织的双重标准?解析注释在代码开发中的作用。”
  • 一种基于局部适应度景观的进化规划的混合策略
  • Python数据攻略-Mongodb数仓无法写入方法汇总
  • 用什么工具来画UML?
  • SQLite3数据类型
  • K8S:K8S对外服务之Ingress
  • flask入门
  • 掌动智能:性能测试工具优势有哪些
  • 实现一个简单的线性回归和多项式回归(2)
  • 云原生Kubernetes:K8S集群kubectl命令汇总
  • Java使用模板导出word、pdf
  • 速通Redis基础(二):掌握Redis的哈希类型和命令