为什么在动态添加事件时我们不能使用赋值运算符?

时间:2014-09-11 23:07:31

标签: c# xaml silverlight

我试图添加动态事件,但是当我使用赋值运算符时它不起作用,但如果我使用+ =运算符,它可以工作,请你帮我理解这个功能。

1 个答案:

答案 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);
        }
    }
}