According to C# specification interface contain a signature of events but a complete and brief implementation of events through interface is not available on the net.
First you identify the interface
public interface IControl { // Raise this event. event EventHandler OnCommand; } |
According to my need I create a class that inherit from System.EventArgs
public class CommandArgs : EventArgs { public string CommandName; } |
My OutCommand class is a implementation of IControl interface that contain an OnCommand event.
public class OutCommnad : IControl { public OutCommnad() {} // Create an event from interface event event EventHandler CommandEvent; event EventHandler IControl.OnCommand { add { if (CommandEvent != null) { lock (CommandEvent) { CommandEvent += value; } } else { CommandEvent = new EventHandler(value); } } remove { if (CommandEvent != null) { lock (CommandEvent) { CommandEvent -= value; } } } } public void Command() { EventHandler handler = CommandEvent; if (handler != null) { //My custom class that passed as arguments. CommandArgs cmd = new CommandArgs(); cmd.CommandName = "Test Application event."; handler(this, cmd); } } } |
Calling of IControl.OnCommand event.
OutCommnad outCommand = new OutCommnad(); IControl con = (IControl)outCommand; con.OnCommand +=new EventHandler(con_OnCommand); outCommand.Command(); |
IControl.OnCommand event function.
void con_OnCommand(object sender, CommandArgs e) { string str = e.CommandName; Console.WriteLine(str); } |
