C# 如何使用+;=有东西吗?

C# 如何使用+;=有东西吗?,c#,C#,下面的代码工作正常(没有编译错误,这意味着代码没有错误) 它们之间有什么不同?因为您不是通过+=添加对象。 您正在为事件机制再分配一个eventhandler 问题是,在事件中有一个要调用的委托方法列表。 +=在此列表中再添加一个方法。 -=将从列表中删除一个方法…您正在做两件完全不同的事情。这一行: p.PingCompleted += Ping_completed(); 正在将方法Ping\u completed附加为对象p的PingCompleted事件的事件处理程序 您的另一行正试图将

下面的代码工作正常(没有编译错误,这意味着代码没有错误)


它们之间有什么不同?

因为您不是通过
+=
添加对象。 您正在为事件机制再分配一个eventhandler

问题是,在事件中有一个要调用的委托方法列表。 +=在此列表中再添加一个方法。
-=将从列表中删除一个方法…

您正在做两件完全不同的事情。这一行:

p.PingCompleted += Ping_completed();
正在将方法
Ping\u completed
附加为对象
p
PingCompleted
事件的事件处理程序

您的另一行正试图将一个
Class2
对象添加到另一个对象中,这是编译器无法理解的,因为在类之间没有定义加法操作


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

事件类覆盖
+
以启用以下语法:

p.PingCompleted += Ping_completed();
要使此操作适用于您的类,只需覆盖
Class2
中的静态
+
运算符:

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

但是您可以总是重载“+”和“=”运算符,然后+=将用于相同或兼容类型的两个对象…请参阅,特别是关于“连接到事件”的部分--而且,
first+=second
first=first+second的语法糖。如果愿意,您可以在类中使用
+
运算符。您不能简单地声明一个类并期望添加到工作中。编译器没有希望弄明白这一点。但是,如果您想要一个运行方式类似于
PingCompleted
的事件或在许多方面类似的委托,则可以使用add assign(+=)和subtract assign(-=)运算符将特定方法附加或分离到该事件/委托的执行中。对于基本事件概述,检查:因为它看起来像是一个基本的例子,因为你可以得到。
p.PingCompleted += Ping_completed();
public class Class2
{
    ...
    public static Class2 operator +(Class2 p1, Class2 p2)
    {
         return whatever the result of adding is...
    }
}