Professional Documents
Culture Documents
Events & Delegates in C#
Events & Delegates in C#
Delegates
Define a signature (return type and arguments) of acceptable callback methods Instantiated by wrapping the callback method Maintain a list of methods to be called when delegate is invoked Just like function pointers
// Declare delegate
class MyClass { static void Main() { // Instantiate delegates MathOp addOp = new MathOp(MyClass.Add); MathOp mulOp = new MathOp(MyClass.Multiply); Console.WriteLine(PerformOp(addOp, 3, 4)); Console.WriteLine(PerformOp(mulOp, 3, 4)); } public static int PerformOp(MathOp op, int x, int y) { return op(x,y); // Invoke delegate } public static int Add(int x, int y) { return x + y; }
class MyClass { private string name; private int number; public MyClass( string name, int number) { this.name = name; this.number = number; }
public void ShowMyName() { Console.WriteLine(My name is + this.name); } public void ShowMyNumber() { Console.WriteLine(My number is + this.number); }
static void Main() { // create some instances of MyClass MyClass mc1 = new MyClass(First, 1); MyClass mc2 = new MyClass(Second, 2); DemoOp demo = null; // declare an empty delegate
// append methods to list demo += new DemoOp(mc1.ShowMyName); demo += new DemoOp(mc2.ShowMyNumber); demo(); // invoke delegate } My name is First My number is 2
mc1 ShowMyName
mc2 ShowMyNumber
Event Handler
Event Handler
Event Handlers
// defined for us delegate void EventHandler(Object sender, EventArgs e);
Event Handlers
// defined for us delegate void EventHandler(Object sender, EventArgs e); using System.Windows.Forms; class MyForm : Form { private Button myButton; public MyForm() { myButton = new Button(); myButton.Text = Click Me; Controls.Add(myButton); myButton.Click += new EventHandler(MyClick); } public void MyClick(Object sender, EventArgs e) { myButton.Text = Thank You; } }
Custom Events
Define the event argument class Define delegate type for custom event handler Define the event Write an event handler (callback function) Subscribe to the event Fire the event when appropriate