/* * C# Program to IIlustrate Handling an Event Declared in an Interface */ namespace interfaceevents { using System; public interface square { event EventHandler Draw; } public interface rectangle { event EventHandler Draw; } public class Shape : square, rectangle { event EventHandler DrawEvent1; event EventHandler DrawEvent2; object objectLock = new Object(); event EventHandler square.Draw { add { lock (objectLock) { DrawEvent1 += value; } } remove { lock (objectLock) { DrawEvent1 -= value; } } } event EventHandler rectangle.Draw { add { DrawEvent2 += value; } remove { DrawEvent2 -= value; } } public void Draw() { EventHandler handler = DrawEvent1; if (handler != null) { handler(this, new EventArgs()); } Console.WriteLine("Drawing a shape."); handler = DrawEvent2; if (handler != null) { handler(this, new EventArgs()); } } } public class classA { // References the shape object as an square public classA(Shape shape) { square d = (square)shape; d.Draw += new EventHandler(d_Draw); } void d_Draw(object sender, EventArgs e) { Console.WriteLine("ClassA receives the square event."); } } public class classB { public classB(Shape shape) { rectangle d = (rectangle)shape; d.Draw += new EventHandler(d_Draw); } void d_Draw(object sender, EventArgs e) { Console.WriteLine("ClassB receives the rectangle event."); } } public class Program { static void Main(string[] args) { Shape shape = new Shape(); classA sub = new classA(shape); classB sub2 = new classB(shape); shape.Draw(); System.Console.WriteLine("Press any key to exit."); System.Console.ReadKey(); } } } /* ClassA receives the Square event. Drawing a shape. ClassB receives the Rectangle event. Press any key to exit.