Articles of covarianza

Perché non è ansible eseguire il cast di IEnumerable come IEnumerable ?

Perché l’ultima riga non è consentita? IEnumerable doubleenumerable = new List { 1, 2 }; IEnumerable stringenumerable = new List { “a”, “b” }; IEnumerable objects1 = stringenumerable; // OK IEnumerable objects2 = doubleenumerable; // Not allowed Questo perché double è un tipo di valore che non deriva dall’object, quindi la covarianza non funziona? Significa […]

Perché C # (4.0) non consente la co- e controvarianza nei tipi di classi generiche?

Qual è la vera ragione di questa limitazione? È solo un lavoro da fare? Concettualmente è difficile? È imansible? Certo, non si potevano usare i parametri di tipo nei campi, perché sono sempre in lettura e scrittura. Ma quella non può essere la risposta, vero? Il motivo di questa domanda è che sto scrivendo un […]

Spiegazione controvarianza

Prima di tutto, ho letto molte spiegazioni su SO e blog sulla covarianza e la contravarianza e un grande ringraziamento va a Eric Lippert per aver prodotto una così grande serie su Covariance e Contravariance . Comunque ho una domanda più specifica che sto cercando di far girare la testa un po ‘. Per quanto […]

Lista Casting – problema di covarianza / controvarianza

Dati i seguenti tipi: public interface IMyClass { } public class MyClass : IMyClass { } Mi chiedo come posso convertire una List in una List ? Non sono completamente chiaro sugli argomenti di covarianza / contravarianza, ma capisco che non posso semplicemente lanciare l’Elenco a causa di ciò. Potrei trovare solo questa soluzione banale; […]

Domanda sulla covarianza C #

Nel codice qui sotto: interface I1 { } class CI1: I1 { } List listOfCI1 = new List(); IEnumerable enumerableOfI1 = listOfCI1; //this works IList listofI1 = listOfCI1; //this does not Sono in grado di assegnare il mio “listOfCI1” a un object IEnumerable (dovuto alla covarianza) Ma perché non sono in grado di assegnarlo a […]

Perché non posso assegnare una lista a una lista ?

Ho definito la seguente class: public abstract class AbstractPackageCall { … } Definisco anche una sottoclass di questa class: class PackageCall : AbstractPackageCall { … } Ci sono anche diverse altre sottoclassi di AbstractPackageCall Ora voglio effettuare la seguente chiamata: List calls = package.getCalls(); Ma ottengo sempre questa eccezione: Error 13 Cannot implicitly convert type […]

tipi di ritorno c # covarianti che utilizzano generici

Il codice è l’unico modo per implementare i tipi di ritorno covarianti? public abstract class BaseApplication { public T Employee{ get; set; } } public class Application : BaseApplication {} public class NewApplication : BaseApplication {} Voglio essere in grado di build un’applicazione o una nuova applicazione e far sì che restituisca il tipo di […]

ancora confuso su covarianza e controvarianza e in / out

ok ho letto un po ‘su questo argomento su StackOverflow, ho guardato questo e questo , ma sono ancora un po’ confuso riguardo la co / contro-varianza. da qui La covarianza consente di sostituire un tipo “più grande” (meno specifico) in un’API in cui il tipo originale viene utilizzato solo in una posizione “output” (ad […]

C #: sovrascrive i tipi di ritorno

C’è modo di ignorare i tipi di ritorno in C #? Se sì come, e se no, perché e quale è un modo consigliato di farlo? Il mio caso è che ho un’interfaccia con una class base astratta e discendenti di quello. Mi piacerebbe farlo (ok, non proprio, ma ad esempio!): public interface Animal { […]

vs in Generics

Qual è la differenza tra e ? Per esempio: public interface IExample { … } vs. public interface IExample { … }