Also habe ich einen Delegaten definiert als:
%Vor% Resharper schlägt vor, dass ich T
contravariant wie folgt machen soll:
Nun, es fällt mir schwer zu verstehen, wofür das gut ist? Ich weiß, dass es mich daran hindert, T
zu einem Rückgabetyp zu machen, aber abgesehen davon, welche nützlichen Einschränkungen erhalte ich, indem ich T
contravariant mache? Das heißt, wenn es Zeit ist, den Delegaten mit einer Instanz zu verwenden, welche Instanzen kann ich mit
das kann ich nicht mit
erstellen %Vor% Hier ist eine Instanz, wo, wenn Sie die Contravarianz in
Markierung entfernen, es nicht kompilieren wird:
Irgendetwas ist zwar gelungen, sollte Ihnen aber zumindest eine Vorstellung davon geben, was Sie ohne diese Dinge nicht machen können.
Insbesondere denke ich, wenn AddLabelClickCallback
und AddButtonClickCallback
Bibliotheksfunktionen waren und Callback
ein Bibliotheksdelegierter war. Wenn es ohne Kontravarianz definiert wäre, müssten Sie die verschiedenen Delegaten showButtonText
und showLabelText
definieren, obwohl Sie nur möchten, dass sie dasselbe tun.
Das Schlüsselwort in
in generic ermöglicht die implizite Konvertierung. Grundsätzlich können Sie Ihrem Delegierten weniger abgeleitete Delegattypen zuweisen ... Nicht immer nützlich, lesen Sie hier für weitere Informationen.
Beispiel aus MSDN Artikel:
%Vor% In diesem Beispiel wird Control
implizit in Button
type konvertiert, obwohl eine Ausnahme auftreten könnte, wenn die implizite Konvertierung in Button
type nicht in der Button
-Klasse definiert wäre, um Control
zu erlauben werde Button
.
Weitere Informationen zu impliziten Konvertierungsdefinitionen: Ссылка
Dies wurde beim Stackoverflow mehrfach gefragt: Kovarianz und Kontravarianz in Programmiersprachen
Ich schlage vor, Sie gehen durch: Ссылка
%Vor%