Csharp/C Sharp/Language Basics/Event Handler

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Demonstrate passing an object to an event handler and performing the proper cast in the method

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /

// ObjEvent.cs -- Demonstrate passing an object to an event handler and // performing the proper cast in the method. // // Compile this program with the following command line: // C:>csc ObjEvent.cs using System; namespace nsEvents {

   public class ObjEvent1
   {
       public delegate void EventHandler (object obj);
       public event EventHandler EvInvoke;
       public void FireEvent (object obj)
       {
           if (obj != null)
               EvInvoke (obj);
       }
       static public void Main ()
       {
           ObjEvent1 main = new ObjEvent1 ();
           main.EvInvoke = new ObjEvent1.EventHandler (ObjEvent);
           main.FireEvent (42);
           main.FireEvent (42.0);
       }
       static void ObjEvent (object obj)
       {
           if (obj is double)
           {
               Console.WriteLine ("Received a double object: " + (double) obj);
           }
           else if (obj is int)
           {
               Console.WriteLine ("Received an int object: " + (int) obj);
           }
       }
   }

}


      </source>


illustrates the use of an event

<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110

  • /

/*

 Example12_4.cs illustrates the use of an event
  • /

using System;

// declare the MeltdownEventArgs class (implements EventArgs) class MeltdownEventArgs : EventArgs {

 // declare a private field named message
 private string message;
 // define a constructor
 public MeltdownEventArgs(string message)
 {
   this.message = message;
 }
 // define a property to get the message
 public string Message
 {
   get
   {
     return message;
   }
 }

}

// declare the Reactor class class Reactor {

 // declare a private field named temperature
 private int temperature;
 // declare a delegate class named MeltdownHandler
 public delegate void MeltdownHandler(
   object reactor,
   MeltdownEventArgs myMEA
 );
 // declare an event named OnMeltdown
 public event MeltdownHandler OnMeltdown;
 // define a property to set the temperature
 public int Temperature
 {
   set
   {
     temperature = value;
     // if the temperature is too high, the reactor melts down
     if (temperature > 1000)
     {
       MeltdownEventArgs myMEA =
         new MeltdownEventArgs("Reactor meltdown in progress!");
         OnMeltdown(this, myMEA);
     }
   }
 }

}

// declare the ReactorMonitor class class ReactorMonitor {

 // define a constructor
 public ReactorMonitor(Reactor myReactor)
 {
   myReactor.OnMeltdown +=
     new Reactor.MeltdownHandler(DisplayMessage);
 }
 // define the DisplayMessage() method
 public void DisplayMessage(
   object myReactor, MeltdownEventArgs myMEA
 )
 {
   Console.WriteLine(myMEA.Message);
 }

}

public class Example12_4 {

 public static void Main()
 {
   // create a Reactor object
   Reactor myReactor = new Reactor();
   // create a ReactorMonitor object
   ReactorMonitor myReactorMonitor = new ReactorMonitor(myReactor);
   // set myReactor.Temperature to 100 degrees Centigrade
   Console.WriteLine("Setting reactor temperature to 100 degrees Centigrade");
   myReactor.Temperature = 100;
   // set myReactor.Temperature to 500 degrees Centigrade
   Console.WriteLine("Setting reactor temperature to 500 degrees Centigrade");
   myReactor.Temperature = 500;
   // set myReactor.Temperature to 2000 degrees Centigrade
   // (this causes the reactor to meltdown)
   Console.WriteLine("Setting reactor temperature to 2000 degrees Centigrade");
   myReactor.Temperature = 2000;
 }

}


      </source>


Shows how multiple objects may subscribe to the same event

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /
// Subscrib.cs -- Shows how multiple objects may subscribe to the same

// event. // // Compile this program with the following command line: // C:>csc Subscrib.cs using System; namespace nsEvents {

   public class Subscrib
   {
       // Declare an instance of the clsDelegate class. The event variable
       // is not static.
       static public clsDelegate dlg = new clsDelegate ();
       static public void Main ()
       {
           // Add clsMain to the event list
           dlg.DoEvent += new clsDelegate.StringHandler (ShowEvent);
           // Create subscribers for the event
           clsSubscriber sub = new clsSubscriber ();
           clsNextSubscriber sub2 = new clsNextSubscriber ();
           // Fire the event.
           dlg.FireEvent ("Fired from Main()");
       }
       static public void ShowEvent (string str)
       {
           Console.WriteLine ("Main handled event: " + str);
       }
   }
   public class clsDelegate
   {
       
       // Declare a delegate for the event
       public delegate void StringHandler (string str);
       
       // A variable to hold the delegate
       public event StringHandler DoEvent;
       
       // This method will trigger the event.
       public void FireEvent (string str)
       {
           if (DoEvent != null)
               DoEvent (str);
       }
   }
   public class clsSubscriber
   {
       public clsSubscriber ()
       {
           Subscrib.dlg.DoEvent +=
                        new clsDelegate.StringHandler (SubscribeEvent);
       }
       public void SubscribeEvent (string str)
       {
           Console.WriteLine ("Subscriber handled event: " + str);
       }
   }
   public class clsNextSubscriber
   {
       public clsNextSubscriber ()
       {
           Subscrib.dlg.DoEvent +=
                        new clsDelegate.StringHandler (SubscribeEvent);
       }
       public void SubscribeEvent (string str)
       {
           Console.WriteLine ("Next Subscriber handled event: " + str);
       }
   }

}


      </source>