委托可以算的上C#的语法精髓,如果说不懂委托就像不懂C#语言一样,一点儿都不为过。废话不多说,开始扯吧。
首先是最原始的状态
1.委托(delegate):
定义:
public delegate bool Compare(int a, int b);
public int MyCompare(Compare selector, int a, int b)
{
return selector(a, b)?1:0;
}
public bool ECompare(int a, int b)
{
return a > b;
}
调用:
Compare cpe=new Program().ECompare;
bool result=cpe.Invoke(10,20);//也可以直接bool result=cpe(10,20);
int val = new Program().MyCompare(cpe, 10, 20);//使用
让我联想到了接口,只是定义了方法的约束,并没有实现,具体实现的行为,是通过这行代码实现的:Compare cpe=new Program().ECompare;
对于这行代码,int val = new Program().MyCompare(cpe, 10, 20);,如果写过JavaScript的朋友是不是有种似曾相识的感觉?
我们将其简化,那么,可以写成这样:
int val = new Program().MyCompare(delegate (int a, int b)
{
return a > b;
}, 10, 20);
这种形式称为匿名方法,可以使得委托的使用变得简洁,但是,这样仍然有很多不方便的地方,于是,微软为我们定义了两个超级好用的系统委托:
2:Action
由于我的Visual Studio安装了reshaper,F12跳转可能和大家的不一样,请看图:
这么多Action的意思是,T1-T8表示委托的参数,返回值类型为void
那么,有很多问题就可以迎刃而解了,由于我没有想到怎么给大家举例子,那么先暂时放一放,一会儿再用它。
3:Func,不废话了,
这么多Func的意思是:前N个参数表示委托的输入参数,最后一个参数表示返回参数的类型
//private Func<int, bool> overTen = (a) =>
//{
// return a > 10;
//};
private Func<int, bool> overTen = (a) => a > 10; new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }.ForEach(item =>
{
Console.WriteLine(item);
});
)
1487



被折叠的 条评论
为什么被折叠?



