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:
Ist das möglich, indem die Betreiber überlastet werden? Ich weiß, dass es gemacht werden könnte, wenn meine Klasse kein Generikum wäre ...
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).
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
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.
Ja, es ist möglich, das implizite Conversion-Operator-Overloading
zu verwenden %Vor%