11
votes

C # - Créer un événementHandler qui peut prendre un nombre quelconque de paramètres

Je souhaite créer un événement personnalisé qui peut avoir un nombre quelconque d'objets que ses paramètres et les objets qu'il reçoit n'est pas connu à l'avance.

Je sais que je peux transmettre un objet [] mais ce que je voudrais est quelque chose de similaire à xxx

où le nombre d'objets peut être 0 ou 10 si nécessaire.

EDIT:

Donc, grâce aux commentaires et réponses que j'ai je suis venu à cela, xxx

est-il acceptable?


3 commentaires

Que diriez-vous d'utiliser parames objet [] args ?


Merci d'avoir souligné des params, à peu près ce que je cherchais. Maintenant, comment puis-je utiliser des params avec la meilleure pratique que Kent a écrit dans sa réponse?


Nous ferions probablement mieux résoudre le problème qui vous a conduit à cette solution actuelle que d'essayer de corriger cette solution. C'est à dire. Cette définition du gestionnaire d'événements a l'air suspecte, alors quel problème résoudra-t-il réellement pour vous? Pourquoi ne savez-vous pas quels objets vous allez passer aux gestionnaires d'événements? Pourquoi n'ont-ils pas de meilleure classe parent que l'objet? etc.


3 Réponses :


8
votes

Vous pouvez définir un délégué en tant que tel: xxx pré>

puis l'utiliser dans votre définition de votre événement: p> xxx pré>

Cependant, c'est cependant contrairement aux meilleures pratiques et non recommandée. Au lieu de cela, vous devez encapsuler toutes les informations supplémentaires que vous avez besoin dans votre propre sous-classe evenargs CODE> et utilisez-la de votre délégué: p>

public class MyEventArgs : EventArgs
{
    // any extra info you need can be defined as properties in this class
}

public event EventHandler<MyEventArgs> MyEvent;


1 commentaires

Merci Kent. Peut-être que j'étais un peu flou dans ce que je voulais réellement. Je voudrais pouvoir passer un éventail d'objets ou plusieurs objets individuellement et je ne sais pas combien d'objets il y a à l'avance.



1
votes

Il n'y a rien pour vous empêcher de déclarer un délégué qui accepte une matrice de paramètres, la même chose que vous définissez une autre méthode qui prend plusieurs arguments:

delegate void someCustomEvent(params object[] args);

event someCustomEvent sce;


0 commentaires

15
votes

EventHandler code> est juste un délégué.

Vous pouvez créer des délégués comme celui-ci: p> xxx pré>

et événement: p>

Bar2(this, new MyEventArgs(1, ""));


1 commentaires

Merci pour votre réponse, cela résume tout ce que je cherchais assez bien.