Sunrabbit

Covarianza e controvarianza

Creato: 2024-11-01

Creato: 2024-11-01 01:06

Questo contenuto è qualcosa che si incontra naturalmente se si è sviluppatori di compilatori,
si usa l'API di un compilatore,
o si usa eccessivamente il sistema di tipi di un compilatore.

È qualcosa che si incontra naturalmente nella nostra vita di programmatori.


Ed è naturalmente integrato nella nostra vita di programmazione.


In breve, se ci sono due tipi, Animal e Dog,

se Dog viene assegnato ad Animal,è covarianzae

al contrariose Animal viene assegnato a Dog,è controvarianza.

Generalmente, non è possibile assegnare Animal a Dog.

Questo perché, dal punto di vista delle persone comuni, non è appropriato,
quindi gli sviluppatori di compilatori, consapevoli di ciò, inseriscono la controvarianzasolo in alcune parti.


Di solito, la controvarianza viene gestita per i valori di input di una funzione, mentre la covarianza viene mantenuta per i valori di output.


Potreste chiedervi "Perché è necessaria questa controvarianza?".

Ciò aiuta a lavorare in modo più flessibile e a mantenere il polimorfismo in aree come la gestione degli eventi.

Ci sono anche casi in cui la covarianza potrebbe causare problemi.


Nel codice sopra, abbiamo inserito Animal al posto di Dog per garantire flessibilità e considerare il polimorfismo.

D'altra parte, se invece di Animal fosse stato utilizzato un sottotipo di Dog, come Chiwawa, durante l'esecuzione del gestore eventi si verificherebbe un errore a causa dell'interfaccia specifica di Chiwawa non presente in Dog.


Potrebbe sembrare che stiamo assegnando Dog ad Animal, dato che utilizzeremo il tipo Animal durante l'esecuzione della funzione.

In realtà, stiamo dicendo "Poiché useremo il tipo Animal durante l'esecuzione, inserisci pure i sottotipi di Animal."


Quindi, la controvarianza viene solitamente utilizzata per i valori di input.


Invarianza, Invariabilità


In breve, l'invarianza è sia covarianza che controvarianza, mentre l'invariabilità non è né l'una né l'altra.

Conclusione

Questo argomento è semplice se lo si considera semplice e complesso se lo si considera complesso, quindi

potrebbe essere utile dare un'occhiata a questo link.




Commenti0