Die Nützlichkeit der Delegiertenvertraulichkeit verstehen

8

Also habe ich einen Delegaten definiert als:

%Vor%

Resharper schlägt vor, dass ich T contravariant wie folgt machen soll:

%Vor%

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

erstellen? %Vor%

das kann ich nicht mit

erstellen %Vor%     
AxiomaticNexus 12.09.2013, 19:43
quelle

3 Antworten

6

Hier ist eine Instanz, wo, wenn Sie die Contravarianz in Markierung entfernen, es nicht kompilieren wird:

%Vor%

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.

    
Dax Fohl 12.09.2013, 20:19
quelle
4

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: Ссылка

    
Haney 12.09.2013 19:49
quelle
1

Dies wurde beim Stackoverflow mehrfach gefragt: Kovarianz und Kontravarianz in Programmiersprachen

Ich schlage vor, Sie gehen durch: Ссылка

%Vor%     
user007 12.09.2013 19:52
quelle

Tags und Links