委托之多播委托浅谈

+=运算符
 -=运算符

学习到了多播委托了 ,现在来聊聊+=运算符 以及-=运算符    

在之前的学习中 我们知道 +=运算符是用于自加运算的 ,但是 在 委托之中 ,+=运算符又有了新的含义
  先看一个实例:
   首先定义一个委托类型
 public  delegate void  del(int a,int b);
   
然后定义一个委托变量  :
  del   委托;

好了 ,现在假设 我们有以下几个方法要使用该类型的委托:
       1)void add(int a,int b)
           {
             console.writeline(a+b);
           }
      2) void minus(int a,int b)
           {
             console.writeline(a-b);
           }
     3) void  ride(int a,int b)
         {
           console.writeline(a*b);
         }
    4) void  divide (int a,int b)
        {
        console.writeline(a/b);
       }
 
现在 ,我们想输入两个整数然后计算出它们 加减乘除 之后分别结果是多少 ,同时又要限定要使用委托输出 , 这时你肯定想的是这样吧:
  public static void  send(int a,int b,del handler)
  {
   handler(a,b);
  }
 public static void main(string [] args)
{
 del  delegate1=add;
del   delegate2=minus;
del   delegate3=ride;
del   delegate4=divide;

sand(1,2,delegate1);
sand(1,2,delegate2);
sand(1,2,delegate3); 
sand(1,2,delegate4); 
console.readkey(); 



上述方法确实可行 ,但是,mian方法却写的有些太过于 繁琐了  ,所以 这时使用多播委托就可以大大简化 代码,提高效率 

现在,main方法可以改写成这样:
public static void  mian(string [] args)
{
 del delegatesand=add;
delegatesand+=minus;
delegatesand+=ride;
delegatesand+=divide; 

sand(1,2,delegatesand);

console.readkey(); 



这样以来就会简化代码 ,少申明变量  提高效率了 

也许,你看到这一段代码时,你会奇怪,+=不会给delegatesand重新赋值吗?

但是我想说你的担心是多余的,+=运算符,在我们之前的理解中,它具有赋值的作用,可这里为什么会与上边的代码 效果一样,与你的想象不一致,其实,这里的+=运算符被重载了 ,不再是我们一般理解的:

    int a=0,b=1;
   a+=b;//此时,a变成了 1
} 

在使用委托时,+=将会被重载,它的作用变成了 在不影响已赋值委托变量的前提下,为已赋值的委托变量再次添加一个引用委托方法
 也就是说,每使用一次 +=运算符,委托变量就会被加入一个委托方法,比如原来 委托变量被赋值了,使用一次+=运算符后,委托变量也就同时作为两个 委托方法的委托了 ,而且,它们运行的先后顺序与添加的先后顺序一致。

同理,-=运算符在委托使用时其意义为,为现有的委托变量(已赋值)减去一个委托方法

例如上例修改下main 方法

public  static void  mian (string [] args)
{
 del delegatesand=add;
del  delegatesand+=minus;
del delegatesand+=ride;
del delegatesand+=dividel;

sand(1,2,delegatesand);

console.writeline("---------------------");

delegatesand-=add;

sand(1,2,delegatesand);

console.readkey();


输出结果: 3
          -1
           2
           0
-------------------
           -1
           2
           0
      

第二次的结果中没有了 add()方法的运算结果

这就是-=运算符的作用。

你可能感兴趣的:(委托之多播委托浅谈)