c#的委托

2021-02-15 00:17

阅读:427

还有一个小时就要回家过年了,祝?大家在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#的要灵活一些。

第三点不同:离上车的时间不多了,下次补上。新年快乐!

 

 


评论


亲,登录后才可以留言!