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

C#-委托delegate

C#-委托delegate

通常情况下,函数内部需要调用其他函数来实现代码的重用,但这样有一个问题:
如果需要更换所调用的函数则需要对该函数的定义再次修改,
事实上,在程序运行过程中,函数也是作为一个存储在堆中的对象,
这样我们也可以通过设置引用函数的变量的方式实现方法调用的修改,
这种引用函数的变量被称为委托类型变量。
使用引用类型步骤如下:

1、声明委托数据类型

由于函数可以通过名称、返回值、参数类型及个数等方面区分出许多不同类型。
因此使用委托类型需要首先声明所调用的函数属于什么类型,格式如下:

public delegate T FunctionType<T>(T a,T b);

从类型定义中,我们可以看到,委托类型所调用的函数需要返回值类型和参数列表匹配才能正常使用。
(对于类型多样的返回值和参数列表,可以定义泛型委托)

2、在函数生命时使用定义好的委托类型做参数

public static T Call<T>(T a,T b,FunctionType<T> functionName) where T:struct
{return functionName(a,b);
}

3、存在多个除函数名外相同类型的函数可以调用

static int Add(int a,int b)
{return a + b;
}
static int Sub(int a,int b) { return a - b; }

4、函数调用时将函数名作为参数传递

Console.WriteLine(ToolTestDelegate.Call<int>(2, 3, Add));
Console.WriteLine(ToolTestDelegate.Call<int>(2,3,Sub));

5、System空间中定义了很多委托(最多可以有16个参数)

视图->对象浏览器

(1)Func带返回值的委托

Func<int, int, int> func = Add;
Console.WriteLine(func(1, 2));

(2)Action不带返回值的委托

Action<Animal> action = MakeAnimal2;
action(new Dog());

6、委托合并(委托多播)

d1 = method1;
d2 = method2;
d3 = d1 + d2;
d3("C");//同时调用method1和method2
http://www.lryc.cn/news/455371.html

相关文章:

  • 编译Thingsboard3.7.0的过程记录
  • vulnhub-THE PLANETS-EARTH靶机
  • 【C语言】分支和循环(2)
  • Python数据分析-远程办公与心理健康分析
  • LabVIEW提高开发效率技巧----使用动态事件
  • 【STM32开发之寄存器版】(五)-窗口看门狗WWDG
  • Leetcode203.移除链表元素-Python
  • 属性拷贝MapStruct
  • Chromium 添加书签功能浅析c++
  • Spring Cloud Netflix Ribbon 负载均衡详解和案例示范
  • Armeria gPRC 高级特性 - 装饰器、无框架请求、阻塞处理器、Nacos集成、负载均衡、rpc异常处理、文档服务......
  • 如何制作一个企业网站,建设网站的基本步骤有哪些?
  • 01-python+selenium自动化测试-基础学习
  • 【redis-05】redis保证和mysql数据一致性
  • 写一个登录判断机制py
  • 特征点检测与匹配是计算机视觉中的基础任务之一,广泛应用于图像配准、物体识别、运动估计、三维重建等领域。
  • python——Echarts现交互式动态可视化
  • 【含开题报告+文档+PPT+源码】基于SSM框架的民宿酒店预定系统的设计与实现
  • 正确理解协程
  • 蒙特卡罗方法 - 采样和蒙特卡罗方法篇
  • 论文阅读:InternVL v1.5| How Far Are We to GPT-4V? 通过开源模型缩小与商业多模式模型的差距
  • 什么是电能表PTB认证
  • C# 单例模式继承
  • ESP8266模块(WIFI STM32)
  • 微信小程序学习实录9:掌握wx.chooseMedia实现多图片文件上传功能(选择图片、预览图片、上传图片)
  • 助动词的分类及其缩略形式
  • Redis——分布式锁
  • C++面试速通宝典——13
  • 数据结构(二叉树)
  • Windows 通过 Docker 安装 GitLab