Hallo!
Per Reflection könntest Du schon herausbekommen, welche Events der Elementtyp definiert, wenn Du ja eine generische Collection machst. Den generischen Typ hast Du ja bereits im Konstruktor Deiner Collection und kannst damit per GetEvents() die EventInfos abfragen.
Jede EventInfo hat auch im EventHandlerType den Typ des entsprechenden Delegaten drin - Problem dabei ist nur, dass Du statisch keine Implementierung für eine Methode erstellen kannst, deren Signatur erst zur Laufzeit bekannten ist.
Um das Wissen, welche Elemente in Deine Collection dazukommen und welche aus ihr entfernt werden, kommst Du nicht herum, da Events in aller Regel an konkrete Objektinstanzen gebunden sind und normalerweise die Instanz, die das Event auslöst, als erstes Argument an den Eventhandler übergeben wird. Zum Einhängen eines Eventhandlers, der dann das Event zentralisieren kann, brauchst Du die Instanz des Objekts. Wenn Du dann nicht mitbekommst, wenn diese Instanz in Deine Collection reinkommt, kannst Du den Eventhandler nicht einhängen - punktum.
Trotzdem bleibt noch das Problem, dass Du keine Implementierung für die unbekannte Signatur des jeweiligen Eventhandlers angeben kannst.
U.U. ließe sich mit dynamisch generiertem Code was machen, aber das wird dann schon sehr heftig.
Vielleicht kannst Du Dir dazu ja beim sog. DuckTyping Input holen. Etwas Ähnliches könnte auch mit Events gehen.
Aber generell denke ich, es wäre hilfreicher, wenn Du Dir zuerst genau überlegst, was die Aufgabe der Klasse genau sein soll. Ich vermute, dass Dein Bestreben, mit generischen Objekten zu hantieren, von denen Du beim Implementierungszeipunkt Deiner Collection nicht weißt, welche Events sie erzeugen, des Guten zu viel ist.
In welchem Bereich würde denn so eine Klasse eingesetzt?
Gruß,
Martin