1. 程式人生 > >c#的委托

c#的委托

對象 它的 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#的委托