我试图添加动态事件,但是当我使用赋值运算符时它不起作用,但如果我使用+ =运算符,它可以工作,请你帮我理解这个功能。
答案 0 :(得分:3)
您附加处理程序的事件实际上是事件处理程序的集合。处理程序的+=
是列表的Add
方法的语义等价物。与添加相反的是删除,由-=
运算符表示。您可以在本文中详细了解它:http://msdn.microsoft.com/en-GB/library/ms366768.aspx
如果属性未定义为事件而是Action<T>
,则属性是一个函数引用的容器。在这种情况下,应使用=
,因为该属性不是集合。
示例:
using System;
public class Program
{
public static void Main()
{
var my = new MyClass();
my.MyAction = msg => Console.WriteLine(msg);
my.MyAction("asdf");
my.MyEvent += (s, e) => Console.WriteLine("Event");
my.InvokeEvent();
}
public class MyClass {
public Action<string> MyAction { get; set; }
public event EventHandler MyEvent;
public void InvokeEvent() {
// the MyEvent can be called only within the MyClass
MyEvent(this, null);
}
}
}