Domanda

Inizialmente avevo chiesto questa domanda, ma nel trovare una risposta, ho scoperto che il mio problema originale era la mancanza di supporto in C# per la covarianza sui tipi restituiti dei metodi ereditati.Dopo averlo scoperto, sono diventato curioso di sapere quali lingue Fare supportare questa funzionalità.

Accetterò la risposta di chi può citarne di più.

MODIFICARE:John Millikin ha correttamente sottolineato che molti linguaggi dinamici supportano questo.Chiarire:

Cerco solo linguaggi statici/fortemente tipizzati.

È stato utile?

Soluzione

  • C++
  • Giava
  • REALbasic
  • Eiffel
  • Sather
  • Modulo-3

Altri suggerimenti

Qualsiasi linguaggio dinamico, ovviamente: Python, Ruby, Smalltalk, Javascript, ecc.

Fondamentalmente quello che sto chiedendo è quali lingue supportano ciò che sto cercando di fare qui.

C# ti consente di specificare diversi tipi di dati per il file get() E set() metodi?In caso contrario, li dividerei in effettivi Leg get_leg() E set_leg(DogLeg) funzioni.Altrimenti accadrà una delle due cose:1) sovraspecificazione di get_leg() 2) sottospecificazione di set_leg().

Java ha aggiunto il supporto per questo nella 1.5.Non verrà compilato nelle versioni precedenti.

Come sottolineato da Ivan Hamilton e Mat Noguchi, C++ supporta questa funzionalità.Ma tieni presente che i tipi restituiti covarianti sono interrotti per le classi modello che ereditano da alcune basi in MSVC da 7.X a 9.X (e probabilmente anche 6).Viene visualizzato l'errore C2555.

C++ supporta i tipi restituiti covarianti.

ma penso che sia quello che sto chiedendo...o no?

Francamente non so cosa stai chiedendo.Apparentemente Java ha lo stesso supporto per la covarianza del tipo restituito di C#, quindi se tutto ciò che stai cercando manca in C#, manca anche in Java.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top