+=运算符
-=运算符
学习到了多播委托了 ,现在来聊聊+=运算符 以及-=运算符
在之前的学习中 我们知道 +=运算符是用于自加运算的 ,但是 在 委托之中 ,+=运算符又有了新的含义
先看一个实例:
首先定义一个委托类型
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()方法的运算结果
这就是-=运算符的作用。
原文:http://www.cnblogs.com/Danlama/p/3596146.html