2015-11-24 41 views
0

下面的代碼工作正常(無conpiler錯誤,這意味着代碼沒有錯誤)如何將+ =與對象一起使用?

//.... 
    public static void CreatePingers(int kt) 
    { 
     for (int start = 1; start <= kt; start++) 
     { 
      //class System.Net.NetworkInformation.Ping 
      Ping p = new Ping(); 
      //This code working fine, But it mean use += for object type? 
      p.PingCompleted += Ping_completed(); 
      pingers.Add(p); 
     } 
    } 

    public static PingCompletedEventHandler Ping_completed() 
    { 
     PingCompletedEventHandler a = new PingCompletedEventHandler(abc); 
     return a; 
    } 
    //.... 

但我的測試代碼不起作用:

//.... 
    static void setB() 
    { 
     Class3 b = new Class3(); 
     //Error"Operator '+=' cannot be applied to operands of type 'Class2' and 'Class2' 
     b.B += a(); 
    } 

    public static Class2 a() 
    { 
    Class2 b = new Class2(); 
    return b; 
    } 
    //.... 

它們之間有什麼向度?

+0

參見[事件教程(HTTPS ://msdn.microsoft.com/library/aa645739.aspx),特別是關於「連接到事件」的部分。 - 另外,'first + = second;'是'first = first + second;'的語法糖。如果需要,您可以[重載](https://msdn.microsoft.com/library/8edha89s.aspx)類中的「+」運算符。 – Corak

回答

0

,因爲你沒有被+=添加對象。 您正在爲事件機制分配一個事件處理程序。

的事情是,內部的事件在於調用的委託方法列表。 + =在此列表中增加一個方法。 - =會從列表中刪除的方法...

+0

但你總是可以重載「+」和「=」操作符,然後+ =將工作相同或兼容類型的兩個對象.... – Henrik

0

你正在做兩個完全不同的東西。這條線:

p.PingCompleted += Ping_completed(); 

是附接方法Ping_completed作爲PingCompleted事件對象p的事件處理程序。

你的其他線路正在嘗試只是一個Class2對象添加到另一個,該編譯器不理解,因爲在類之間沒有定義的加法運算。

所以,反問:你有什麼打算爲這個做什麼?

+0

我只是想了解它是如何工作:( –

+0

你不能只是聲明一個類,並期望能夠增加工作量,編譯器沒有希望弄明白,但是,如果你想要一個象'PingCompleted'這樣的事件,或者在很多方面類似的事件,你可以使用* add-assign(+ =)和subtract-assign( - =)操作符將特定的方法附加或分離到該事件/委託的執行。 –

+0

有關基本事件概述,請查看:http://www.tutorialspoint。 com/csharp/csharp_events.htm,因爲它看起來像您可以獲得的基本示例。 –

0

事件類覆蓋+,使語法,如:

p.PingCompleted += Ping_completed(); 

爲了使這項工作對你的類,只需覆蓋靜態+運營商Class2

public class Class2 
{ 
    ... 
    public static Class2 operator +(Class2 p1, Class2 p2) 
    { 
     return whatever the result of adding is... 
    } 
} 
相關問題