CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3

Thread: Delegation

  1. #1
    Join Date
    Aug 2005
    Posts
    98

    Delegation

    Hello

    http://www.csharp-station.com/Tutorials/Lesson14.aspx

    Code:
    
     using System;
    using System.Drawing;
    using System.Windows.forms;
    
    // custom delegate
    public delegate void Startdelegate();
    
    class Eventdemo : form
    {
        // custom event
        public event Startdelegate StartEvent;
    
        public Eventdemo()
        {
            Button clickMe = new Button();
    
            clickMe.Parent = this;
            clickMe.Text = "Click Me";
            clickMe.Location = new Point(
                (ClientSize.Width - clickMe.Width) /2,
                (ClientSize.Height - clickMe.Height)/2);
    
            // an EventHandler delegate is assigned
            // to the button's Click event
            clickMe.Click += new EventHandler(OnClickMeClicked);
    
            // our custom "Startdelegate" delegate is assigned
            // to our custom "StartEvent" event.
            StartEvent += new Startdelegate(OnStartEvent);
    
            // fire our custom event
            StartEvent();
        }
    
        // this method is called when the "clickMe" button is pressed
        public void OnClickMeClicked(object sender, EventArgs ea)
        {
            MessageBox.Show("You Clicked My Button!");
        }
    
        // this method is called when the "StartEvent" Event is fired
        public void OnStartEvent()
        {
            MessageBox.Show("I Just Started!");
        }
    
        static void Main(string[] args)
        {
            Application.Run(new Eventdemo());
        }
    }


    And this from :http://www.codeguru.com/csharp/cshar...eventhandling/



    Code:
    
    using System;
    //Step 1 Create delegate object
    public delegate void MyHandler1(object sender,MyEventArgs e);
    public delegate void MyHandler2(object sender,MyEventArgs e);
    
    //Step 2 Create event handler methods
    class A{
      public const string m_id="Class A";
      public void OnHandler1(object sender,MyEventArgs e){
        Console.WriteLine("I am in OnHandler1 and MyEventArgs is {0}",
                          e.m_id);
      }
      public void OnHandler2(object sender,MyEventArgs e){
        Console.WriteLine("I am in OnHandler2 and MyEventArgs is {0}",
                          e.m_id);
      }
    
      //Step 3 create delegates, plug in the handler and register
      //       with the object that will fire the events
      public A(B b){
        MyHandler1 d1=new MyHandler1(OnHandler1);
        MyHandler2 d2=new MyHandler2(OnHandler2);
        b.Event1 +=d1;
        b.Event2 +=d2;
      }
    }
    
    //Step 4 Calls the encapsulated methods through the
    //       delegates (fires events)
    class B{
      public event MyHandler1 Event1;
      public event MyHandler2 Event2;
      public void FireEvent1(MyEventArgs e){
        if(Event1 != null){
          Event1(this,e);
        }
      }
      public void FireEvent2(MyEventArgs e){
        if(Event2 != null){
          Event2(this,e);
        }
      }
    }
    public class MyEventArgs  EventArgs{
      public string m_id;
    }
    public class Driver{
      public static void Main(){
        B b= new B();
        A a= new A(b);
        MyEventArgs e1=new MyEventArgs();
        MyEventArgs e2=new MyEventArgs();
        e1.m_id ="Event args for event 1";
        e2.m_id ="Event args for event 2";
        b.FireEvent1(e1);
        b.FireEvent2(e2);
      }
    }

    I have 2 questions,

    In first example ,It didn't used



    But in second example,It is used
    Why?

    When do we use EventArgs?
    Last edited by Abalfazl; March 25th, 2007 at 03:26 AM.

  2. #2
    Join Date
    Aug 2005
    Posts
    98

    Re: Delegation

    Hello


    From Programming C#, 4th Edition

    Code:
    
    namespace EventKeyword
    {
    
      // a class to hold the information about the event
      // in this case it will hold only information 
      // available in the clock class, but could hold
      // additional state information 
      public class TimeInfoEventArgs : EventArgs
      {
       public readonly int hour;
       public readonly int minute;
       public readonly int second;
       public TimeInfoEventArgs(int hour, int minute, int second)
        {
          this.hour = hour;
          this.minute = minute;
          this.second = second;
        }
      }
    
      // our subject -- it is this class that other classes
      // will observe. This class publishes one event: 
      // OnSecondChange. The observers subscribe to that event
      public class Clock
      {
        private int hour;
        private int minute;
        private int second;
    
         // the delegate the subscribers must implement
        public delegate void SecondChangeHandler
          (
          object clock, 
          TimeInfoEventArgs timeInformation
          );
    
        // the keyword event controls access to the delegate
        public event SecondChangeHandler OnSecondChange;
    
        // set the clock running
        // it will raise an event for each new second
        public void Run( )
        {
          
          for(;;)
          {
            // sleep 10 milliseconds
            Thread.Sleep(10);
                    
            // get the current time
            System.DateTime dt = System.DateTime.Now;
    
            // if the second has changed
            // notify the subscribers
            if (dt.Second != second)
            {
              // create the TimeInfoEventArgs object
              // to pass to the subscriber
              TimeInfoEventArgs timeInformation = 
                new TimeInfoEventArgs(
                dt.Hour,dt.Minute,dt.Second);
    
              // if anyone has subscribed, notify them
              if (OnSecondChange != null)
              {
                OnSecondChange(
                  this,timeInformation);
              }
            }
    
            // update the state
            this.second = dt.Second;
            this.minute = dt.Minute;
            this.hour = dt.Hour;
          }
        }
      }
    
      // an observer. DisplayClock subscribes to the 
      // clock's events. The job of DisplayClock is 
      // to display the current time 
      public class DisplayClock
      {
        // given a clock, subscribe to 
        // its SecondChangeHandler event
        public void Subscribe(Clock theClock)
        {
          theClock.OnSecondChange +=
            new Clock.SecondChangeHandler(TimeHasChanged);
        }
    
        // the method that implements the 
        // delegated functionality
        public void TimeHasChanged(
          object theClock, TimeInfoEventArgs ti)
        {
          Console.WriteLine("Current Time: {0}:{1}:{2}",
            ti.hour.ToString( ), 
            ti.minute.ToString( ), 
            ti.second.ToString( ));
        }
      }
    
      // a second subscriber whose job is to write to a file
      public class LogCurrentTime
      {
        public void Subscribe(Clock theClock)
        {
          theClock.OnSecondChange +=
            new Clock.SecondChangeHandler(WriteLogEntry);
        }
    
        // This method should write to a file.
        // We write to the console to see the effect.
        // This object keeps no state.
        public void WriteLogEntry(
          object theClock, TimeInfoEventArgs ti)
        {
          Console.WriteLine("Logging to file: {0}:{1}:{2}",
            ti.hour.ToString( ), 
            ti.minute.ToString( ), 
            ti.second.ToString( ));
        }
      }
    
       public class Test
       {
          public static void Main( )
          {
             // create a new clock 
             Clock theClock = new Clock( );
    
             // create the display and tell it to
             // subscribe to the clock just created
             DisplayClock dc = new DisplayClock( );
             dc.Subscribe( theClock );
    
             // create a Log object and tell it
             // to subscribe to the clock 
             LogCurrentTime lct = new LogCurrentTime( );
             lct.Subscribe( theClock );
    
             // Get the clock started
             theClock.Run( );
          }
       }
    }
    May someone explain about this part of code:

    Code:
    if (OnSecondChange != null)
              {
                OnSecondChange(
                  this,timeInformation);
              }
            }
    I don't know but I think,But I think it should be something like this:

    Onsecondchange =+new secondchangehandler(funcname)...
    Last edited by Abalfazl; March 25th, 2007 at 04:49 AM.

  3. #3
    Join Date
    Aug 2005
    Posts
    98

    Re: Delegation

    Hello

    about this:

    Code:
    public void OnHandler1(object sender,MyEventArgs e)
    May someone explain it?

    http://www.codeguru.com/csharp/cshar...eventhandling/

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured