Frage

Ich habe ursprünglich gefragt diese Frage, aber als ich eine Antwort fand, stellte ich fest, dass mein ursprüngliches Problem darin bestand, dass in C# die Kovarianz der Rückgabetypen geerbter Methoden nicht unterstützt wurde.Nachdem ich das herausgefunden hatte, wurde ich neugierig, welche Sprachen es gibt Tun unterstützen diese Funktion.

Ich akzeptiere die Antwort desjenigen, der die meisten nennen kann.

BEARBEITEN:John Millikin hat richtig darauf hingewiesen, dass viele dynamische Sprachen dies unterstützen.Um klarzustellen:

Ich suche nur nach statischen/stark typisierten Sprachen.

War es hilfreich?

Lösung

  • C++
  • Java
  • REALbasic
  • Eiffel
  • Sather
  • Modula-3

Andere Tipps

Natürlich alle dynamischen Sprachen – Python, Ruby, Smalltalk, Javascript usw.

Grundsätzlich frage ich, welche Sprachen das unterstützen, was ich hier versuche.

Ermöglicht C# die Angabe verschiedener Datentypen für? get() Und set() Methoden?Wenn nicht, würde ich sie in tatsächliche aufteilen Leg get_leg() Und set_leg(DogLeg) Funktionen.Andernfalls wird eines von zwei Dingen passieren:1) Überspezifikation von get_leg() 2) Unterspezifikation von set_leg().

Java hat dies in 1.5 unterstützt.In früheren Versionen wird es nicht kompiliert.

Wie Ivan Hamilton und Mat Noguchi betonten, unterstützt C++ diese Funktion.Beachten Sie jedoch, dass kovariante Rückgabetypen für Vorlagenklassen, die von einer Basis in MSVC 7.X bis 9.X (und wahrscheinlich auch 6) erben, fehlerhaft sind.Sie erhalten den Fehler C2555.

C++ unterstützt kovariante Rückgabetypen.

aber ich denke, das ist es, wonach ich frage ... oder doch?

Ehrlich gesagt weiß ich nicht, was Sie fragen.Java bietet offenbar die gleiche Unterstützung für Kovarianz vom Rückgabetyp wie C#. Wenn also das, wonach Sie suchen, in C# fehlt, fehlt es auch in Java.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top