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