关于委托、匿名方法、Lambda表达式的演变过程
一:委托
//声明委托类型
public delegate void MyDelegate(param1,param2,param3)
//定义与委托兼容的方法
public void function_name(param1,param2,param3)
{
}
//创建委托实例(即委托引用方法)
//常规的标准的创建一个委托实例,最原始的
1:MyDelegate del = new MyDelegate(function_name);
//简写或简化的写法,
2:MyDelegate del = function_name;
二:匿名方法
后期为了进一步简略代码,把方法的定义与被引用合并到了一起(不再单独定义function_name方法),从而引出了“匿名方法”(使用delegate关键字)
//声明委托类型
public delegate void MyDelegate(param1,param2,param3)
//创建委托实例(即委托引用方法)
1:MyDelegate del = new MyDelegate(delegate(param1,param2,param3){/*方法体*/});//注意匿名方法的参数签名要与委托类型的签名兼容
//简化版
2:MyDelegate del = delegate(param1,param2,param3){/*方法体*/};//注意匿名方法的参数签名要与委托类型的签名兼容
三:Lambda表达式
再后来,出现了lambda表达式,这样委托出现的地方,都可以使用lambda表达式来替换
1:语句lambda
param1... => {/*方法体*/}
2:表达式lambda
param1... => param1=true
说明:文中的“兼容”不是指类型完全相同,只要符合is a原则,也算是兼容。
四:实例应用
private ICommand startCommand;
public ICommand StartCommand
{
get
{
if (startCommand == null)
{
startCommand = new RelayCommand(param =>
{
Start();
}, param => true);
} return startCommand;
}
}
//语句lambda(有代码体,或者说方法体)=》委托类型的参数
param =>
{
Start();
}《=》委托(无返回值+一个参数)
//表达式lambda,该表达式的值就是true
param => true《=》布尔类型的参数(bool flag)
委托:方法的引用
委托最重要的两个地方(返回值+参数列表)
委托出现的地方大部分可以用lambda表达式(即语句lambda)替换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器