2010-12-03 28 views
0

I ont la structure suivante:événement déclenché par l'événement de la classe de base, pas classe dérivée

class item 
Static EventHandler Boom 

public virtual void handleStuff(); 

public void DoStuff() 
trigger Boom EventHandler 
handleStuff(); 

class childItem1 : item 
    override handleStuff() etc 

class childItem2 : item 
    override handleStuff() etc 

Alors basiquement quand je l'appelle childItem1.DoStuff(); il va déclencher l'even sur la classe "Item" et ensuite exécuter le handleStuff() sur la classe childItem1.

Donc, voici mon problème, quand je m'abonne à l'événement childItem1.Boom il se déclenchera aussi si j'appelle childITem2.Dostuff(); comme il déclenche également l'événement boom sur la classe "article"

Alors, voici la question, comment puis-je définir eventhandlers sur une classe de base, que je peux abonner à des classes dérivées, mais sans le problème ci-dessus?

+1

S'il vous plaît poster le code réel - le code de pseudo ne nous dit rien. – Oded

Répondre

1

Cela doit être dû au fait que votre événement a été déclaré comme Static.

Si vous avez un événement non-statique déclaré sur votre classe de base, l'événement sera invoqué correctement comme prévu.

Le programme suivant imprimera Derived apprpriately -

class Program 
    { 
     static void Main(string[] args) 
     { 
      var d = new Derived(); 
      d.Boom += new EventHandler(HandleBoom); 

      d.TriggerBoom(); 

      Console.ReadLine(); 
     } 

     static void HandleBoom(object sender, EventArgs e) 
     { 
      Console.WriteLine(sender.GetType()); 
     } 
    } 

    class Base 
    { 
     public event EventHandler Boom = null; 

     public void TriggerBoom() 
     { 
      if(Boom != null) 
       Boom(this, EventArgs.Empty); 
     } 
    } 

    class Derived : Base 
    { 
    }