1.场景
使用委托实现两数相加并输出的场景,来进行各种委托的实现。
2.代码
基础方法,两个最简单基础操作方法
//两数相加方法
public int Add(int i,int j)
{
return i + j;
}
//输出结果方法
public void print(string s)
{
Console.Write(s);
}
(1)最基础的形式
先定义委托(全局变量):
//加法
delegate int AddHander(int i, int j);
//输出
delegate void Print(string msg);
使用:
public void Show1()
{
AddHander add = Add;
Print pr = print;
//下面两种都可以
//pr(add(1, 2).ToString());
pr.Invoke(add.Invoke(1, 2).ToString());
}
这样既可得到输出。
(2)基础形式
不定义全局直接使用。注意Func<T1,T2,T3...,RETURN T> 和Action<T...>的使用
public void Show2()
{
Func<int, int, int> add = Add;
Action<string> pr = print;
pr(add(1, 2).ToString());
}
或者等价于:
public void Show3()
{
Func<int, int, int> add = new Func<int, int, int>(Add);
Action<string> pr = new Action<string>(print);
pr(add(1, 2).ToString());
}
(3)直接一个方法里面完成所有操作(无需上面定义的Add和print方法,直接完成)
public void Show4()
{
Func<int, int, int> add = new Func<int, int, int>(delegate(int i,int j) {
return i + j;
});
Action<string> pr = new Action<string>(delegate(string s) {
Console.Write(s);
});
pr(add(1, 2).ToString());
}
(4)直接一个方法里面完成所有操作(无需上面定义的Add和print方法,使用lambda简化委托)
public void Show5()
{
Func<int, int, int> add = new Func<int, int, int>((i,j)=> {
return i + j;
});
Action<string> pr = new Action<string>((s)=> {
Console.Write(s);
});
pr(add(1, 2).ToString());
}
注意此处的lamdba形式。此法最为简洁优雅(代码量最小,最整齐)
3.总结
以上即为委托的各种形式的使用方法。其中lamdba尤为简洁美观好用,基础类型较少使用