Use delegate: event


   

/*
 * C# Programmers Pocket Consultant
 * Author: Gregory S. MacBeth
 * Email: gmacbeth@comporium.net
 * Create Date: June 27, 2003
 * Last Modified Date:
 */
using System;

namespace Client.Chapter_8___Delegates_and_Events
{
  public delegate void MyDelegateEventHandler(int i);
  
  public class MyEventSubscriberChapter_8___Delegates_and_Events
  {
    static void Main(string[] args)
    {
      MyEventPublisher EventPublisher = new MyEventPublisher();
      

      MyDelegateEventHandler MyAnonymousDelegate = delegate(int x)
      {
        Console.WriteLine("Anonymous Event FIRED!");
      };

      EventPublisher.MyEvent += MyAnonymousDelegate;
      
      EventPublisher.DoSomething();
    }
    
  }
  
  public class MyEventPublisher
  {
    public event MyDelegateEventHandler MyEvent;
    public int DoSomething()
    {
      MyEvent(5);
      return 0;
    }
  }

}

           
          


Use the bult-in EventHandler delegate


   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


// Use the bult-in EventHandler delegate. 
  
using System; 
 
// Declare an event class. 
class MyEvent { 
  public event EventHandler SomeEvent; // uses EventHandler delegate 
 
  // This is called to fire SomeEvent. 
  public void OnSomeEvent() { 
    if(SomeEvent != null) 
      SomeEvent(this, EventArgs.Empty); 
  } 
} 
 
public class EventDemo6 { 
  static void handler(object source, EventArgs arg) { 
    Console.WriteLine("Event occurred"); 
    Console.WriteLine("Source is " + source); 
  } 
 
  public static void Main() {  
    MyEvent evt = new MyEvent(); 
 
    // Add handler() to the event list. 
    evt.SomeEvent += new EventHandler(handler); 
 
    // Fire the event. 
    evt.OnSomeEvent(); 
  } 
}


           
          


Create a custom means of managing the event invocation list

/*
C#: The Complete Reference
by Herbert Schildt

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/

// Create a custom means of managing the event invocation list.

using System;

// Declare a delegate for an event.
delegate void MyEventHandler();

// Declare an event class that holds up to 3 events.
class MyEvent {
MyEventHandler[] evnt = new MyEventHandler[3];

public event MyEventHandler SomeEvent {
// Add an event to the list.
add {
int i;

for(i=0; i < 3; i++) if(evnt[i] == null) { evnt[i] = value; break; } if (i == 3) Console.WriteLine("Event list full."); } // Remove an event from the list. remove { int i; for(i=0; i < 3; i++) if(evnt[i] == value) { evnt[i] = null; break; } if (i == 3) Console.WriteLine("Event handler not found."); } } // This is called to fire the events. public void OnSomeEvent() { for(int i=0; i < 3; i++) if(evnt[i] != null) evnt[i](); } } // Create some classes that use MyEventHandler. class W { public void Whandler() { Console.WriteLine("Event received by W object"); } } class X { public void Xhandler() { Console.WriteLine("Event received by X object"); } } class Y { public void Yhandler() { Console.WriteLine("Event received by Y object"); } } class Z { public void Zhandler() { Console.WriteLine("Event received by Z object"); } } public class EventDemo4 { public static void Main() { MyEvent evt = new MyEvent(); W wOb = new W(); X xOb = new X(); Y yOb = new Y(); Z zOb = new Z(); // Add handlers to the event list. Console.WriteLine("Adding events."); evt.SomeEvent += new MyEventHandler(wOb.Whandler); evt.SomeEvent += new MyEventHandler(xOb.Xhandler); evt.SomeEvent += new MyEventHandler(yOb.Yhandler); // Can't store this one -- full. evt.SomeEvent += new MyEventHandler(zOb.Zhandler); Console.WriteLine(); // Fire the events. evt.OnSomeEvent(); Console.WriteLine(); // Remove a handler. Console.WriteLine("Remove xOb.Xhandler."); evt.SomeEvent -= new MyEventHandler(xOb.Xhandler); evt.OnSomeEvent(); Console.WriteLine(); // Try to remove it again. Console.WriteLine("Try to remove xOb.Xhandler again."); evt.SomeEvent -= new MyEventHandler(xOb.Xhandler); evt.OnSomeEvent(); Console.WriteLine(); // Now, add Zhandler. Console.WriteLine("Add zOb.Zhandler."); evt.SomeEvent += new MyEventHandler(zOb.Zhandler); evt.OnSomeEvent(); } } [/csharp]

A class receives the notification when a static method is used as an event handler


   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


/* A class receives the notification when  
   a static method is used as an event handler. */ 
  
using System; 
 
// Declare a delegate for an event.  
delegate void MyEventHandler(); 
 
// Declare an event class. 
class MyEvent { 
  public event MyEventHandler SomeEvent; 
 
  // This is called to fire the event. 
  public void OnSomeEvent() { 
    if(SomeEvent != null) 
      SomeEvent(); 
  } 
} 
 
class X { 
 
  /* This is a static method that will be used as 
     an event handler. */ 
  public static void Xhandler() { 
    Console.WriteLine("Event received by class."); 
  } 
} 
 
public class EventDemo3 { 
  public static void Main() {  
    MyEvent evt = new MyEvent(); 
 
    evt.SomeEvent += new MyEventHandler(X.Xhandler); 
 
    // Fire the event. 
    evt.OnSomeEvent(); 
  } 
}


           
          


Individual objects receive notifications when instance event handlers are used


   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


/* Individual objects receive notifications when instance 
   event handlers are used. */ 
  
using System; 
 
// Declare a delegate for an event.  
delegate void MyEventHandler(); 
 
// Declare an event class. 
class MyEvent { 
  public event MyEventHandler SomeEvent; 
 
  // This is called to fire the event. 
  public void OnSomeEvent() { 
    if(SomeEvent != null) 
      SomeEvent(); 
  } 
} 
 
class X { 
  int id; 
 
  public X(int x) { id = x; } 
 
  // This is an instance method that will be used as an event handler. 
  public void Xhandler() { 
    Console.WriteLine("Event received by object " + id); 
  } 
} 
 
public class EventDemo2 { 
  public static void Main() {  
    MyEvent evt = new MyEvent(); 
    X o1 = new X(1); 
    X o2 = new X(2); 
    X o3 = new X(3); 
 
    evt.SomeEvent += new MyEventHandler(o1.Xhandler); 
    evt.SomeEvent += new MyEventHandler(o2.Xhandler); 
    evt.SomeEvent += new MyEventHandler(o3.Xhandler); 
 
    // Fire the event. 
    evt.OnSomeEvent(); 
  } 
}


           
          


An event multicast demonstration


   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


// An event multicast demonstration. 
  
using System; 
 
// Declare a delegate for an event.  
delegate void MyEventHandler(); 
 
// Declare an event class. 
class MyEvent { 
  public event MyEventHandler SomeEvent; 
 
  // This is called to fire the event. 
  public void OnSomeEvent() { 
    if(SomeEvent != null) 
      SomeEvent(); 
  } 
} 
 
class X { 
  public void Xhandler() { 
    Console.WriteLine("Event received by X object"); 
  } 
} 
 
class Y { 
  public void Yhandler() { 
    Console.WriteLine("Event received by Y object"); 
  } 
} 
 
public class EventDemo1 { 
  static void handler() { 
    Console.WriteLine("Event received by EventDemo"); 
  } 
 
  public static void Main() {  
    MyEvent evt = new MyEvent(); 
    X xOb = new X(); 
    Y yOb = new Y(); 
 
    // Add handlers to the event list. 
    evt.SomeEvent += new MyEventHandler(handler); 
    evt.SomeEvent += new MyEventHandler(xOb.Xhandler); 
    evt.SomeEvent += new MyEventHandler(yOb.Yhandler); 
 
    // Fire the event. 
    evt.OnSomeEvent(); 
    Console.WriteLine(); 
 
    // Remove a handler. 
    evt.SomeEvent -= new MyEventHandler(xOb.Xhandler); 
    evt.OnSomeEvent(); 
  } 
}


           
          


A very simple event demonstration


   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


// A very simple event demonstration. 
  
using System; 
 
// Declare a delegate for an event.  
delegate void MyEventHandler(); 
 
// Declare an event class. 
class MyEvent { 
  public event MyEventHandler SomeEvent; 
 
  // This is called to fire the event. 
  public void OnSomeEvent() { 
    if(SomeEvent != null) 
      SomeEvent(); 
  } 
} 
 
public class EventDemo { 
  // An event handler. 
  static void handler() { 
    Console.WriteLine("Event occurred"); 
  } 
 
  public static void Main() {  
    MyEvent evt = new MyEvent(); 
 
    // Add handler() to the event list. 
    evt.SomeEvent += new MyEventHandler(handler); 
 
    // Fire the event. 
    evt.OnSomeEvent(); 
  } 
}