c#的委托
阿新 • • 發佈:2018-02-11
對象 它的 main 創建 int 拼接 過年 接口 del
還有一個小時就要回家過年了,祝?大家在2018好運連連,發大財。
c#的委托看上去類似oc的代理和java的接口,但用起來卻很不一樣,所謂的代理和接口就是獨立出來的一些方法聲明(沒有實現),只要某個類A繼承這個代理,就可以實現它們,那麽其它的類就可以讓A作為它們的屬性,讓A代替這些類去做事情,只是調用的時候和時機由這些類去做,真正去實現交給A。就好比你搶票,交給第三方軟件或者黃牛,第三方軟件和黃牛就是A,他們搶票的方法和渠道就是接口和代理,你不需要去關心怎麽搶的,你只要交費或者啟動開始搶票的按鈕。
現在來了解一些c#的委托,不同之處有三點:
先貼代碼看看c#的委托如何實現:
using System;
delegate int NumberChanger(int n);//委托的聲明
namespace DelegateAppl
{
class TestDelegate
{
static int num = 10;
public static int AddNum(int p)
{
num += p;
return num;
}
public static int MultNum(int q)
{
num *= q;
return num;
}
public static int getNum()
{
return num;
}
static void Main(string[] args)
{
// 創建委托實例
NumberChanger nc1 = new NumberChanger(AddNum);
NumberChanger nc2 = new NumberChanger(MultNum);
// 使用委托對象調用方法
nc1(1);
Console.WriteLine("Value of Num: {0}", getNum());
nc2(1);
Console.WriteLine("Value of Num: {0}", getNum());
NumberChanger nc;
nc = nc1 + nc2;
nc(5);//委托的多播調用(順序執行)
Console.WriteLine("Value of Num: {0}", getNum());
Console.ReadKey();
}
}
}
打印如下:
Value of Num: 11
Value of Num: 11
Value of Num: 90
第一點不同:c#的委托聲明限制了方法的類型(參數要統一)表示一類方法,方法名隨意,所以有了多播的功能,說白了就是將多個方法實現拼接在一起順序執行;而oc的代理不限制方法的類型,但要確定是哪些方法名。
第二點不同:c#的委托實例就是一個方法變量,只要類型一致。oc的代理則需要某個類去繼承,然後交給這個類去實現。c#的要靈活一些。
第三點不同:離上車的時間不多了,下次補上。新年快樂!
c#的委托