关于委托、匿名方法、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)替换


 

 

 

 

 

 

 

 

posted @   长白山  阅读(239)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示