C#委托 Delegate Action Func

本文详细介绍了C#中的委托机制,包括delegate的声明,Action和Func的区别与用法,以及多播委托和匿名方法(特别是Lambda表达式)的原理与示例。
摘要由CSDN通过智能技术生成

Delegate

声明委托,委托的声明与方法类似,只是需要在方法前加上 delegate 关键字,注:delegate与Delegate是有区别的,在声明时要用delegate

例:delegate void i(int x);  声明一个参数为int型,无返回值的委托

delegate void i(int x);
static void Main(string[] args)//静态方法里面只能调用静态方法
{
    i invoker = iMethod;
    int x = 8;
    invoker(x);//之后就是用委托来调用方法,与iMethod(x)效果相同
    invoker.Invoke(x);//同样可以触发委托,与上效果一致
    iMethod(x);
}

public static void iMethod(int x)
{
    Console.WriteLine("{0}", x);
}

委托所调用的方法要与委托类型需要一致

Action,Func

Action委托,Func委托,它们是系统委托,不再需要声明委托 如delegate void i(int x);

Action委托无返回值,有0个或多个参数

static void Main(string[] args)
{
    Action<int, double> invoker = iMethod;//泛型,类似List,但是Action<int,double>,方法的参数类型与Action相对应
    int x = 8;
    double y = 2;
    invoker(x, y);
}

public static void iMethod(int x, double y)
{
    Console.WriteLine("{0}", x * y);
}

Func委托,有返回值,有0个或多个参数

Func和Action用法基本一致,但是由于Func有返回值,<>最后一个对应返回值类型

static void Main(string[] args)
{
    Func<int, double, String> invoker = iMethod;//Func和Action用法基本一致,但是由于Func有返回值,<>最后一个对应返回值类型
    int x = 8;
    double y = 2;
    invoker(x, y);
}

public static string iMethod(int x, double y)
{
    string s = x + "+" + y;
    return s;
}

多播委托

多播委托一般声明返回值类型为void,+= 增加事件,-= 减少事件

若多播委托取返回值,一般是得到最后执行事件的返回值

delegate int dele(int x);
static void Main(string[] args)
{
    dele invoker = iMethod;
    invoker += iMethod2;//+= 增加事件
    int x = 8;
    Console.WriteLine(invoker(x));//若是第一个事件,输出x为8,第二个事件输出返回值为9
    Console.ReadKey();
}

public static int iMethod(int x)
{
    Console.WriteLine(1 + "+" + 2);
    return x;
}

public static int iMethod2(int x)
{
    Console.WriteLine("END!");
    return ++x;
}

匿名方法  Lambda表达式

匿名方法顾名思义,就是没有名字的方法,是对委托的简化

例:

Func<int, int, int> plus = delegate (int a, int b)
{
    return a + b;
};

Lambda表达式又是对匿名方法的简化

将上面的匿名方法进行简化

Func<int, int, int> plus = (a, b) => { int c = a + b; return c; };//=(参数)=>{方法体}
Func<int, int, int> plus = (a, b) => a+b;

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值