using System;
public class Test
{
public static void Main()
{
new TestEvent();
}
}
public class TestEvent
{
public event Action Event;
public TestEvent()
{
Action d1 = Print;
Action d2 = Print;
// The delegates are distinct
Console.WriteLine("d1 and d2 are the same: {0}", object.ReferenceEquals(d1, d2));
Event += d1;
Event -= d2;
// But the second one is able to remove the first one :-)
// (an event when is empty is null)
Console.WriteLine("d2 was enough to remove d1: {0}", Event == null);
}
public void Print()
{
Console.WriteLine("TestEvent");
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCW5ldyBUZXN0RXZlbnQoKTsKCX0KfQoKcHVibGljIGNsYXNzIFRlc3RFdmVudAp7CiAgICBwdWJsaWMgZXZlbnQgQWN0aW9uIEV2ZW50OwoKICAgIHB1YmxpYyBUZXN0RXZlbnQoKQogICAgewogICAgICAgIEFjdGlvbiBkMSA9IFByaW50OwogICAgICAgIEFjdGlvbiBkMiA9IFByaW50OwoKICAgICAgICAvLyBUaGUgZGVsZWdhdGVzIGFyZSBkaXN0aW5jdAogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJkMSBhbmQgZDIgYXJlIHRoZSBzYW1lOiB7MH0iLCBvYmplY3QuUmVmZXJlbmNlRXF1YWxzKGQxLCBkMikpOwoKICAgICAgICBFdmVudCArPSBkMTsKICAgICAgICBFdmVudCAtPSBkMjsKCiAgICAgICAgLy8gQnV0IHRoZSBzZWNvbmQgb25lIGlzIGFibGUgdG8gcmVtb3ZlIHRoZSBmaXJzdCBvbmUgOi0pCiAgICAgICAgLy8gKGFuIGV2ZW50IHdoZW4gaXMgZW1wdHkgaXMgbnVsbCkKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiZDIgd2FzIGVub3VnaCB0byByZW1vdmUgZDE6IHswfSIsIEV2ZW50ID09IG51bGwpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIFByaW50KCkKICAgIHsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiVGVzdEV2ZW50Iik7CiAgICB9Cn0K