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

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.kler.cn/news/337263.html

相关文章:

  • 云计算Openstack Horizon
  • 前端推荐书单
  • 图解IP分类及子网掩码计算实例
  • AI学习指南深度学习篇-生成对抗网络(GAN)简介
  • Llama 3.2 视觉能力评估
  • RabbitMQ事务模块
  • vue3中el-input在form表单按下回车刷新页面
  • 销售秘籍:故事+观点+结论
  • 面试--Eurake
  • C#开发中如何在不破坏封装性下调用控件
  • python 实现最小路径和算法
  • HarmonyOS NEXT:实现电影列表功能展示界面
  • Python数据分析-远程办公与心理健康分析
  • 借助ChatGPT校对学术论文的10 个有效提示词指令
  • 【STM32开发之寄存器版】(五)-窗口看门狗WWDG
  • 利用大规模语言模型提高生物医学 NER 性能的新方法
  • 【Redis入门到精通九】Redis中的主从复制
  • 18734 拓扑排序
  • 全排列和组合数区分
  • ICM20948 DMP代码详解(67)