using System;
using System.Collections;
using System.Runtime.CompilerServices;
public class Button
{
public delegate void ClickHandler(object sender, EventArgs e);
Hashtable delegateStore = new Hashtable();
static object clickEventKey = new object();
public event ClickHandler Click
{
[MethodImpl(MethodImplOptions.Synchronized)]
add
{
delegateStore[clickEventKey] =
Delegate.Combine((Delegate) delegateStore[clickEventKey],
value);
}
[MethodImpl(MethodImplOptions.Synchronized)]
remove
{
delegateStore[clickEventKey] =
Delegate.Remove((Delegate) delegateStore[clickEventKey],
value);
}
}
protected void OnClick()
{
ClickHandler ch = (ClickHandler) delegateStore[clickEventKey];
if (ch != null)
ch(this, null);
}
public void DoClick()
{
OnClick();
}
}
class MainClass
{
static public void ButtonHandler(object sender, EventArgs e)
{
Console.WriteLine("Button clicked");
}
public static void Main()
{
Button button = new Button();
button.Click += new Button.ClickHandler(ButtonHandler);
button.DoClick();
button.Click -= new Button.ClickHandler(ButtonHandler);
button.DoClick();
}
}
Button clicked