ich über den folgenden Code oft kommen:Anmeldung zu einer Veranstaltung für die Dauer eines mit Block
myService.SomeEvent += listener;
myService.DoSomething();
myService.SomeEvent -= listener;
Das ist großartig, aber es wäre schön, wenn wir dies in einem schöneren Weg machen können. Ich dachte an wie etwas zu tun:
using(EventScope.Start(myService.SomeEvent, listener)){
myService.DoSomething();
}
Leider ist dieses von C# verboten ist, weil myService.SomeEvent nur auf der linken Seite eines + = oder erscheinen können - = (aus gutem Grund). Meine Frage ist, welche anderen Möglichkeiten habe ich? Im Idealfall würde Ich mag diese Art sicher sein, die Reflexion Regeln und die folgenden Aktionen ausführen (was ich bereits implementiert haben):
using(EventScope.Start(myService, "SomeEvent", listener){
myService.DoSomething();
}
Um klar zu sein, ich bin nicht verheiratet, die ‚mit‘ Syntax zu verwenden und man könnte argumentieren, dass es eine Perversion der Sprache ist. Andere Optionen würden geschätzt werden!
Ja, es sieht so aus, als ob Sie am besten eine Zeichenfolge übergeben und daraus ein EventInfo-Objekt erstellen. – Noldorin
Ich hatte gehofft, dass das nicht der Fall war ... es funktioniert gut, aber es ist nicht ideal. – jonnii
Als eine Frage des Stils, würde ich versuchen - endlich dafür. Das betont, dass die _semantics_ der Operation "abonnieren Sie das Ereignis, tun Sie das Ding, immer abbestellen". Die Verwendung eines wegwerfbaren Gegenstandes betont "dieses Ding hat Ressourcen, die aggressiv aufgeräumt werden müssen". Ich mag es nicht, Programm-Semantik mit Aufräum-Mechanismen zu mischen. Ich glaube nicht, dass ich bis zur "Perversion" gehen würde, aber es ist zumindest eine schlecht riechende Praxis. –