2010-11-09 8 views
0

J'ai besoin d'accéder aux propriétés x et y de l'objet obj (de type ClassA) dans la méthode de gestion des événements souscrite à un événement dans l'objet obj.coulée vs passage des paramètres

Option1: Faites simplement cet événement de type EventHandler, lancez l'expéditeur.

 
void handlingMethod(object sender, EventArgs e) 
{ 
    ClassA ca = sender as ClassA; 
    Dosomething(ca.id, ca.x, ca.y); 
} 

RaiseEvent(this,null); //in ClassA 

Option2: Faire SpecialEventHandler1 afin que la coulée peut être évité.

 
void handlingMethod(SpecialEventArgs e) 
{ 
    Dosomething(e.id, e.x,e.y); 
} 

RaiseSpecialEvent1(new SpecialEventArgs(this.id, this.x,this.y));//in ClassA 

Option3: Faire un SpecialEventHandler2 de sorte que les deux coulée et nouvel objet création SpecialEventArgs peut être évité. Disons que ces événements sont augmentés continuellement @ 50/sec. Lequel est le plus efficace? Cela dépend-il de la taille de ClassA? Je suppose que Option3 est le meilleur moyen en termes de performance. S'il vous plaît donnez vos idées.

+0

Quelle langague? Java? – jball

+0

la langue est C# – user441660

Répondre

3

50hz n'est pas rapide du tout, donc votre meilleur pari est de respecter la convention. Cela rendra votre code plus accessible aux nouveaux développeurs. Souvenez-vous également d'utiliser un transtypage lorsque vous n'en attendez qu'un seul, de sorte que vous puissiez obtenir une exception détaillée si l'événement est déclenché de manière incorrecte. Les événements ne devraient pas prendre trop de temps mais s'ils ont vraiment besoin de le décharger sur un autre thread. Dans les deux cas, vous devriez rester avec la convention pour les événements.

void MyClassA_Something(object sender, EventArgs e) 
{ 
    ThreadPool.QueueUserWorkItem(o => { 
     ClassA ca = (ClassA)sender; 
     Dosomething(ca.id, ca.x, ca.y); 
    }); 
} 
+0

Merci @ ChaosPandion. mais qu'en est-il de 500 et DoSomething prenant beaucoup de temps? Dites-vous qu'à tout moment les autres options sont meilleures? Pouvez-vous donner un aperçu de la façon dont le moulage est fait exactement? – user441660

+0

Je crois que le casting est aussi instantané que possible. Vous feriez mieux d'améliorer le DoSomething si vous avez des problèmes de performance. En outre, envisagez d'utiliser un verrou sur cette ligne s'il s'agit d'un multi-thread. –

Questions connexes