Entwickler-Ecke
Basistechnologien - generische Events
Määx - Fr 09.08.13 11:50
Titel: generische Events
Hallo zusammen,
ich arbeite in meinem neuen Projekt sehr viel mit Events und wollte nun eine in meiner Klasse liegende generische Funktion auslagern. Bisher sieht diese so aus:
C#-Quelltext
1: 2: 3: 4: 5:
| private void sendMessage<T>(T myObject) { string xml = Common.serializeObjectToXML<T>(myObject)); [...] } |
Nun wollte ich diese Funktion gerne an eine "übergeordnete" Klasse übergeben:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public delegate void SendMessageEventHandler<T>(MyClass theClass, T myObject); public event SendMessageEventHandler<T> sendMessage; private void sendMessage<T>(T myObject) { if(sendMessage!=null) sendMessage(myObject); } |
Leider kann ich dem public event keinen generischen Typ übergeben? Gibt es eine Möglichkeit dies doch irgendwie zu realisieren oder muss ich für jeden möglichen Typ ein eigenes Event definieren??
Vielen Dank
Määx
Ralf Jansen - Fr 09.08.13 12:12
Events sollten eh immer einen EventArgs Abkömmling als Parameter haben und nicht einfach platt irgendein Object. Also immer der Signatur "Sender, EventArgs" folgen. Die EventArgs selber können dann problemlos einen generischen Parameter haben ala EventArgs<T> haben.
Beispiel:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| public class EventArgs<T> : EventArgs { public EventArgs(T data) { Data = data; }
public T Data { get; private set; } }
public class Test<T> { public event EventHandler<EventArgs<T>> MeinLieberEvent;
protected void RaiseMeinLieberEvent(T x) { EventHandler<EventArgs<T>> handler = MeinLieberEvent; if (handler != null) handler(this, new EventArgs<T>(x)); } } |
Määx - Fr 09.08.13 13:21
ah ok danke! Dann werde ich mir das so umbasteln und nach und nach alle anderen Events ebenfalls ersetzen. Ist dann ja auch viel einfacher zu integrieren wenn man zusätzliche Informationen übergeben möchte!
Dank!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!