2009-04-02 7 views
1

Der .net EventHandler ist auf Vorlagen beschränkt, die von EventArgs erbt. Wie ist das gemacht? Die Umsetzung (Got to refference in vs) zeigt den folgenden Code:C# Typerested Delegate mit Vorlage

[Serializable] 
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); 

Aber ich denke, TEventArgs ist nur ein Name. Wie kann ich einen typisierten Delegaten schreiben, der auf irgendetwas beschränkt ist, das von MyClass erbt?

+0

Ich kann die Lösung in 2 Sekunden sehen, wenn ich auf den Code von Jon Skeet schaue. Ich habe beide Antworten verwendet und möchte den Link zur Dokumentation nicht verpassen, aber ich kann nur eine Antwort als richtig markieren. – Tarion

+0

Um den Link hinzuzufügen ist kein Fehler;) Aber schreibe den offensichtlichen Teil auch ab. – Tarion

Antwort

5

TEventArgs ist ein generischer Typ Parameter - aber es hat eine Einschränkung. Die eigentliche Signatur ist:

[Serializable] 
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e) 
    where TEventArgs : EventArgs 

Die „where TEventArgs : EventArgs“ -Bit ist der Typ Beschränkung, die bedeutet, dass Sie nur ein Typargument für TEventArgs die EventArgs oder eine abgeleitete Klasse ist versorgen können.

Im Grunde sind es nur "normale" C# Generika, die nur auf eine Delegat-Deklaration angewendet werden.