Implement events through interface in C#

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);
        }
This article is part of the GWB Archives. Original Author: Saqib Ullah

New on Geeks with Blogs