implizit ein genericT zurück auf T werfen

8

Wenn ich eine generische Klasse wie die Klasse MyGeneric<T> schreibe, ist es möglich, eine implizite Umwandlung in Typ T zu schreiben, also kann ich Dinge tun wie:

%Vor%

Ist das möglich, indem die Betreiber überlastet werden? Ich weiß, dass es gemacht werden könnte, wenn meine Klasse kein Generikum wäre ...

    
Jeremy 06.01.2010, 00:00
quelle

4 Antworten

19

Nun ja, aber für die Liebe von Zombie Jesus tu das NICHT. Es ist wirklich verwirrend. Sie verstehen den Zweck von Generika leicht falsch, denke ich. Es wird nicht verwendet, um eine Klasse in diesen Typ "umzuwandeln". Es wird verwendet, damit dieser Typ (MyGenericString) den gewünschten Typ für verschiedene Zwecke kennt (typischerweise sind dies sammlungsbasierte Zwecke).

    
Noon Silk 06.01.2010, 00:02
quelle
21

Ja, aber übertreib es nicht, das verwirrt die Leute. Ich würde es nur für Wrapper-Typen verwenden.

%Vor%     
dan 06.01.2010 00:06
quelle
14

Wie andere gesagt haben, ist das legal , aber gefährlich . Es gibt viele Fallstricke, in die Sie fallen können. Angenommen, Sie haben einen benutzerdefinierten Konvertierungsoperator zwischen C<T> und T definiert. Dann sagen Sie

%Vor%

Was passiert? Läuft Ihre benutzerdefinierte Conversion oder nicht? Nein, weil c bereits ein Objekt ist.

Wie ich bereits sagte, gibt es verrückte Situationen, in die Sie geraten können, wenn Sie versuchen, generische Konvertierungsoperatoren zu definieren. tun Sie es nicht, es sei denn, Sie haben ein tiefes und detailliertes Verständnis von Abschnitt 10.10.3 der Spezifikation.

    
Eric Lippert 06.01.2010 00:31
quelle
0

Ja, es ist möglich, das implizite Conversion-Operator-Overloading

zu verwenden %Vor%     
Paul Creasey 06.01.2010 00:08
quelle

Tags und Links