委托、匿名、lamda表达式概念与实例(总结篇)
概述
委托、匿名、lamda表达式三者相当于递进的关系。一开始现有委托,而后基于委托衍生匿名,再简化为lamda表达
一、委托
int a = 5;
Console.WriteLine(a);
这里定义一个变量5,a指向5的地址;
函数也有自己的地址,那么也可以像定义变量一样,定义一个变量指向这个函数,这也就是委托变量类型,用来指向函数。
public void Base(int a)
{
}
变量可以作为参数传给一个函数,委托变量也能以参数方式传给一个函数。
1.完整实例
定义一个委托并使用
using System;
namespace delegate_lamda
{
class Program
{
static void Main(string[] args)
{
//第三步 f1赋给了委托变量D1
D1 d = f1;
//第四步 调用d来执行委托
d();
}
// 第二步 这里定义了一个函数f1
static void f1()
{
Console.WriteLine("我是委托所指的函数");
}
}
//第一步 这里定义了一个委托变量,他指向的是一个方法
delegate void D1();
}
委托以参数传入一个方法中
这里以参数方式传入 Console.WriteLine();方法中,用来打印函数执行结果
using System;
namespace delegate_lamda
{
class Program
{
static void Main(string[] args)
{
D2 d2 = f2;
Console.WriteLine(d2());
}
static string f2()
{
return "我以参数的形式传入方法";
}
}
delegate string D2();
}
二、匿名
匿名函数是对委托的简化与衍生。
原先是三步走,定义函数,定义委托,函数赋给委托,
使用匿名后,可以直接一步搞定。
using System;
namespace delegate_lamda
{
class Program
{
static void Main(string[] args)
{
//这里delegata没有委托变量名,直接写入方法体
Action a = delegate () { Console.WriteLine("我是匿名函数"); };
a();
}
}
Acton 是内置定义的一个无返回值的委托。
三、lamda
lamda是对匿名进一步的衍生简化
using System;
namespace delegate_lamda
{
class Program
{
static void Main(string[] args)
{
//系统内置的需要有返回值的委托类型
Func<int, int> f3 = (int i) =>
{
return i;
};
Console.WriteLine( $"我是lamda函数,传入值是{f3(5)}");
}
}
把delegate标识符省略,直接用下列格式
(这里是参数)=>{这里是方法体}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现