+=運算符
-=運算符
學習到了多播委托了 ,現在來聊聊+=運算符 以及-=運算符
在之前的學習中 我們知道 +=運算符是用於自加運算的 ,但是 在 委托之中 ,+=運算符又有了新的含義
先看一個實例:
首先定義一個委托類型
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()方法的運算結果
這就是-=運算符的作用。