+=运算符-=运算符学习到了多播委托了 ,现在来聊聊+=运算符 以及-=运算符 在之前的学习中 我们知道 +=运算符是用于自加运算的 ,但是 在 委托之中 ,+=运算符又有了新的含义 先看一个实例: 首先定义一个委托类型public delegate void del(int a,int b); 然后定义一个委托变量 : del 委托;好了 ,现在假设 我们有以下几个方法要使用该类型的委托: 1)voidadd(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()方法的运算结果这就是-=运算符的作用。
新闻热点
疑难解答