如何使用+ =与对象?

时间:2015-11-24 14:05:01

标签: c#

下面的代码工作正常(没有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;
   }
   //....

他们之间的区别是什么?

3 个答案:

答案 0 :(得分:0)

因为您没有按+=添加对象。 你正在为事件机制再分配一个事件处理程序。

事情是,事件内部有一个要调用的委托方法列表。 + =在此列表中再添加一个方法。 - =会从列表中删除一个方法......

答案 1 :(得分:0)

你做了两件完全不同的事情。这一行:

p.PingCompleted += Ping_completed();

将方法Ping_completed附加为对象PingCompleted的{​​{1}}事件的事件处理程序。

你的另一行试图将一个p对象添加到另一个,编译器不理解,因为类之间没有定义添加操作。

所以,反问:你打算做什么?

答案 2 :(得分:0)

事件类重写+以启用如下语法:

p.PingCompleted += Ping_completed();

要使您的课程更有效,只需覆盖+中的静态Class2运算符:

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