C#委托&Lambda

委托类似于C/C++中的函数指针,与函数指针不同的是委托是一种类型安全的

但是委托本身不安全,如果能用接口就不用委托。犹如函数指针一样,如果其他人设置了函数指针,任何地方都可以被调用,防人之心不可无,害人之心不可有。

虽然事件是基于委托,但事件是安全的,因为事件在外部不可以Invoke显示调用,而委托在外部则可以Invoke显示调用。


1、声明委托。

注意:因为委托是类,所以如果想被当前类(假设当前类名为A)以外的类所用,应放在类A同等级,否则使用时需要A.xxxDelegate来使用,如果为private时即使在同一个命名空间则其他类也无法使用。

public delegate int AddDelegate(int a, int b);// 加
public delegate int SubDelegate(int a, int b);// 减
public delegate int MulDelegate(int a, int b);// 乘
public delegate int DivDelegate(int a, int b);// 除
public delegate int PowerDelegate(int a, int b);// 乘方


private AddDelegate myAddDelegate;// 加
private SubDelegate mySubDelegate;// 减
private MulDelegate myMulDelegate;// 乘
private DivDelegate myDivDelegate;// 除
private PowerDelegate myPowerDelegate;// 乘方

2、使用委托

int x = 9;
int y = 2;
int result = 0;

myAddDelegate = delegate { return add(x, y); };// 匿名委托
mySubDelegate = delegate (int a, int b)// 匿名委托
{
    return a - b;
};
myMulDelegate = (int a, int b) =>// Lambda表达式
{
    return (a * b);
};
myDivDelegate = new DivDelegate(div);// 从这里看出委托是一种类,此处new了一个实例。直接传入方法
myPowerDelegate = new PowerDelegate((int a, int b) =>// 从这里看出委托是一种类,此处new了一个实例。此处使用ambda表达式
{
    return (int)Math.Pow(a, b);
});


Func<int, int, int> func = (int a, int b) =>// Lambda表达式(泛型委托)
{
    return (a / b);
};
private int add(int a, int b)
{
return (a + b);
}
private int div(int a, int b)
{
return (a / b);
}

3、调用

result = myAddDelegate.Invoke(x, y);// Invoke显示调用
result = myAddDelegate(x, y);
result = mySubDelegate(x, y);
result = myMulDelegate(x, y);
result = myDivDelegate(x, y);
result = myPowerDelegate(x, y);
result = func(x, y);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值