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尤爲簡潔美觀好用,基礎類型較少使用