委托、匿名、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标识符省略,直接用下列格式
(这里是参数)=>{这里是方法体}

浙公网安备 33010602011771号