Je recherche la manière appropriée et élégante de créer une architecture Mediator/Subscriber avec des rappels typés.Passer des délégués en tant que paramètres pour le modèle médiateur/abonné
Supposons que j'ai une classe-à-dire les délégués des «événements de:
public class E
{
public delegate void SomethingHappened (float a, int b);
public delegate void ProgressFinished (int[] c);
}
Maintenant, je veux créer une classe de médiateur qui enregistrerait callbacks aux délégués et callbacks d'expédition avec les paramètres fournis:
public class Mediator
{
public static void Register (???, Action callback)
{
// supplied delegate += callback
}
public static void Dispatch (???, params object[] list)
{
// executing supplied delegate with params: delegate(list)
}
}
donc je pourrais l'utiliser de la manière suivante:
// Class A:
Mediator.Register (E.SomethingHappened, OnSomethingHappened);
private void OnSomethingHappened (float a, int b)
{
//..........
}
// Class B:
Mediator.Dispatch (E.SomethingHappened, 0.1f, 'qwe');
maintenant t Le problème est que je ne peux pas passer le délégué en tant que paramètre pour enregistrer ou envoyer. Comment puis-je résoudre ce problème?
Je pense que vous avez mal compris les délégués. Un délégué * est * un rappel (ou peut être utilisé comme tel) - vous n'enregistrez pas un rappel * avec * un délégué. Peut-être cherchez-vous plutôt des événements? –
J'ai modifié votre titre. S'il vous plaît voir, "[Les questions devraient inclure" tags "dans leurs titres?] (Http://meta.stackexchange.com/questions/19190/)", où le consensus est "non, ils ne devraient pas". –
@JonSkeet: Je crois que OP voulait enregistrer une méthode de rappel concrète basée sur son type de délégué, mais ne savait pas comment passer le type de délégué à la méthode – Groo