2015-11-24 42 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... 
    } 
} 
相关问题