2010-10-21 5 views
3

J'ai créé un programme factice très simple pour comprendre les délégués et les événements. Dans mon programme ci-dessous, je suis simple d'appeler une méthode. Quand j'appelle une méthode, cinq méthodes sont appelées automatiquement avec l'aide des délégués et des événements. Veuillez prendre connaissance de mon programme et faites-moi savoir où je me trompe ou si je me trompe, car c'est la première fois que j'utilise des délégués et des événements.délégués et événements

using System; 

namespace ConsoleApplication1 
{ 
    public delegate void MyFirstDelegate(); 

    class Test 
    { 
     public event MyFirstDelegate myFirstDelegate; 

     public void Call() 
     { 
      Console.WriteLine("Welcome in Delegate world.."); 
      if (myFirstDelegate != null) 
      { 
       myFirstDelegate(); 
      } 
     }   
    } 

    class AttachedFunction 
    { 
     public void firstAttachMethod() 
     { 
      Console.WriteLine("ONE..."); 
     } 
     public void SecondAttachMethod() 
     { 
      Console.WriteLine("TWO..."); 
     } 
     public void thirdAttachMethod() 
     { 
      Console.WriteLine("THREE..."); 
     } 
     public void fourthAttachMethod() 
     { 
      Console.WriteLine("FOUR..."); 
     } 
     public void fifthAttachMethod() 
     { 
      Console.WriteLine("FIVE..."); 
     } 
    } 

    class MyMain 
    { 
     public static void Main() 
     { 
      Test test = new Test(); 
      AttachedFunction attachedFunction = new AttachedFunction(); 
      test.myFirstDelegate += new MyFirstDelegate(attachedFunction.firstAttachMethod); 
      test.myFirstDelegate += new MyFirstDelegate(attachedFunction.SecondAttachMethod); 
      test.myFirstDelegate += new MyFirstDelegate(attachedFunction.thirdAttachMethod); 
      test.myFirstDelegate += new MyFirstDelegate(attachedFunction.fourthAttachMethod); 
      test.myFirstDelegate += new MyFirstDelegate(attachedFunction.fifthAttachMethod); 

      test.Call(); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

Qu'est-ce qui ne va pas? vous n'avez pas posé de question – Andrey

+0

Cela me semble être une bonne façon d'utiliser les délégués. Vous pouvez utiliser le sucre syntaxique C# 2.0 et supérieur en remplaçant '+ = new MyFirstDelete (methodName);' avec seulement '+ = nomMéthode;' si vous le souhaitez. Des délégués anonymes sont également à votre disposition. –

+0

@Jesse ... merci .. Je vais utiliser + = methodName :) –

Répondre

2

Les événements sont mis en œuvre à l'aide des délégués. Cela dit par les événements convention prennent la forme de:

void EventHandler(Object sender, EventArgs args); 

EventHandler est en fait un délégué défini en .Net. EventArgs est une classe dans .Net qui agit comme un espace réservé pour transmettre des informations supplémentaires. Si vous avez des informations supplémentaires, créez une classe dérivée de EventArgs et des propriétés contenues pour les données supplémentaires; donc vous créer votre propre délégué comme ceci:

void MyEventHandler(Object sender, MyEventArgs args); 

Microsoft a un tutoriel sur les événements here et décrit également la définition et des événements de collecte here

+0

Merci Steve..Nice Link .. :) –

0

Essayez de mettre la ligne

public delegate void MyFirstDelegate(); 

dans la classe de test.

Aussi, utilisez la fonction Invoke sur l'événement au lieu, à savoir

myFirstDelegate.Invoke(); 
+0

Merci Macfanpro. –

2

Ceci est un modèle commun de traiter des événements:

// define the delegate 
public delegate void CustomEventHandler(object sender, CustomEventArgs e); 

// define the event args 
public class CustomEventArgs : EventArgs 
{ 
    public int SomeValue { get; set; } 

    public CustomEventArgs(int someValue) 
    { 
     this.SomeValue = someValue; 
    } 
} 

// Define the class that is raising events 
public class SomeClass 
{ 
    // define the event 
    public event CustomEventHandler CustomEvent; 

    // method that raises the event - derived classes can override this 
    protected virtual void OnCustomEvent(CustomEventArgs e) 
    { 
     // do some stuff 
     // ... 

     // fire the event 
     if(CustomEvent != null) 
      CustomEvent(this, e); 
    } 

    public void SimulateEvent(int someValue) 
    { 
     // raise the event 
     CustomEventArgs args = new CustomEventArgs(someValue); 

     OnCustomEvent(args); 
    } 
} 

public class Main 
{ 
    public static void Main() 
    { 
     SomeClass c = new SomeClass(); 

     c.CustomEvent += SomeMethod; 
     c.SimulateEvent(10); // will cause event 
    } 

    public static void SomeMethod(object sender, CustomEventArgs e) 
    { 
     Console.WriteLine(e.SomeValue); 
    } 
} 
+0

Merci Dismissile –

Questions connexes