C# 委托函数 delegate

在C#中,委托(Delegate)是一种特殊的类型,它可以持有对方法的引用。
委托是实现事件的基础。事件本质上是多播委托,允许多个方法被触发

委托允许你将方法作为参数传递给其他方法,或者将方法作为返回值从方法返回,或者将方法赋值给变量。(可以用作函数的参数、返回值、给变量赋值)

  • delegate:具有相同签名和返回值类型的有序方法列表
  • 有序方法列表:有序的放入几个函数地址,被称为调用列表
  • 当委托被调用时, 调用列表中的每一个方法
    在这里插入图片描述

和C++的函数指针类似,但委托是面向对象且类型安全的

委托中保存的方法,或者说存入委托中的函数可以来自任何类或结构,只要他们符合委托的定义

  • 返回值
  • 签名(包括ref ,out 修饰符)
    在这里插入图片描述

以下是委托的一些基本概念和用法:

委托的定义和使用

切记委托是一种类型!!!

public delegate int MyDelegate(int x, int y);
public int Add(int x, int y) {
    return x + y;
}
// 实例化委托
MyDelegate addDelegate = new MyDelegate(Add);
int result = addDelegate(2, 3); // 输出 5

可以理解为,委托的实例化其实是将函数的地址存入委托列表中。
因为一个委托中可以放入多个函数

在这里插入图片描述

为委托增加方法

在这里插入图片描述

用于调用委托的参数将会用于调用-调用列表中的每一个方法,除非有一个参数输出参数

调用带有返回值的委托

在这里插入图片描述

匿名方法

delegate (input parameters)
{
	code
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
匿名函数有什么用???
为了给委托快速赋值?
有点子多余

Lambda 表达式 – 匿名函数的优化版

C# 3.0 引入了Lambda表达式,它是一种更简洁的语法来定义匿名方法:

在这里插入图片描述

在这里插入图片描述

lambda可以直接转为delegate 类型

在这里插入图片描述

Func - lambda和委托函数的中间商

 public delegate TResult Func<in T, out TResult>(T arg);
//这是一个泛型委托,表示一个接受一个类型为T的参数,并返回一个TResult的函数。

Func<TSource, bool> 
//这个泛型委托,接受一个TSource类型的参数并返回一个bool值
//它通常用于定义谓词(Predicate),即一个返回真或假的函数,常用于过滤集合中的元素。

Func是C#的内置泛型委托,以便更加简洁方便的使用委托
这样不用再定义委托-实例化委托。

结合匿名函数Func作为形参,最终传入的实参可以是:
x => x==1 等形式
即 一个传入X参数,返回bool值

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值