程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 委托之多播委托淺談

委托之多播委托淺談

編輯:C#入門知識

+=運算符
 -=運算符

學習到了多播委托了 ,現在來聊聊+=運算符 以及-=運算符    

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

這就是-=運算符的作用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved