java 匿名委托_委托、泛型委托、多播委托、匿名函数、lamda表达式、事件

1、为什么要使用委托

将一个方法作为参数传递给另一个方法

2、委托概念

public delegate int 委托名(int a, int b);

声明一个委托类型,可以用访问修饰符修饰,delegate关键字,有返回值和参数

委托所指向的函数必须跟委托具有相同的签名,即相同的参数个数,相同的参数类型和相同的返回值类型

3、匿名函数

没有名字的函数                         static int Add(int a, int b){return a + b; }=》匿名函数Expression add =delegate (int a,int b) {return a +b; }

=》再简化(lambda表达式)    Calculate((a, b) => a + b,10,25);

staticvoid Calculate(Expression ex,int a,intb)

{

Console.WriteLine(ex(a, b) +"\n");

}

4、泛型委托

public delegate T 委托名(T a, T b);

微软已定义好一套泛型委托供我们使用,以免繁琐重复定义,它们分别是Action,Func和Predicate

1). Action

Action是无返回值的泛型委托

Action表示无参,无返回值的委托

Action 表示有传入参数int,string无返回值的委托

Action 表示有传入参数int,string,bool无返回值的委托

Action 表示有传入4个int型参数,无返回值的委托

Action至少0个参数,至多16个参数,无返回值。

2). Func

Func是有返回值的泛型委托

Func 表示无参,返回值为int的委托

Func 表示传入参数为object, string 返回值为int的委托

Func 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

3). Predicate

Predicate 是返回bool型的泛型委托

Predicate 表示传入参数为int 返回bool的委托

Predicate有且只有一个参数,返回值固定为bool

5、多播委托

包含一个以上方法的引用,可以顺序执行多个方法

包含的方法必须返回void,否则会抛出异常,之后所有的委托都不会执行

可以使用GetInvocationList调用与委托直接相关的方法,捕获异常,并继续下一次迭代

5ac3990a0f422775e9f799f9826f7017.png 

abb5b3e9b3be8c948ac78f889db73bf4.png

class Program

{

delegate void show(out int a);

static void Main(string[] args)

{

int d;

show s = show1;

s += show2;

s += show3;

s += show4;

Delegate[] list = s.GetInvocationList();

foreach (show dsin list)

{

try

{

ds(out d);

}

catch

{

Console.WriteLine("show2异常");

}

}Console.Read();

}

static void show1(out int a)

{

a=1;

Console.WriteLine(a);

}

static void show2(out int a)

{

a = 2;

Console.WriteLine(a);

}

static void show3(out int a)

{

a = 3;

Console.WriteLine(a);

}

static void show4(out int a)

{

a = 4;

Console.WriteLine(a);

}

}

6、lamda表达式

本质还是匿名函数(参数=>返回条件)

7、事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值