Deve esserci qualcosa di fondamentale su interfacce/generici che non ho ancora imparato. Spero di impararlo ora.Perché un elenco di interfacce non può utilizzare un tipo di implementazione?
Ecco lo scenario:
ho questa interfaccia e classe:
public interface IInterface
{
string TestValue { get; set; }
}
public class RealValue: IInterface
{
public string TestValue { get; set; }
}
Se creo un metodo come questo si compila bene:
public class RandomTest: IMethodInterface
{
public IInterface GetRealValue()
{
RealValue realValue = new RealValue();
return realValue;
}
}
nota che io sono restituire un oggetto che implementa l'interfaccia.
Ora, se posso aggiungere alla classe RandomTest
un metodo che restituisce la lista allora non funziona più:
public List<IInterface> GetRealValues()
{
List<RealValue> realValues = new List<RealValue>();
return realValues; // ERROR Here <- says it can't convert to a List<IInterface>
}
Quindi, la mia ipotesi è che i generici non possono capirlo, ma perché?
C'è un modo per aggirare questo? Che cosa fate quando il valore di ritorno del metodo di cui sopra è bloccata perché si implementa un'interfaccia simile a questo:
public interface IMethodInterface
{
IInterface GetRealValue();
List<IInterface> GetRealValues(); // Can't just convert the return types to a concrete
// class because I am implementing this. This
// interface is in a separate project that does not
// have the concrete classes.
}
C'è qualche speranza? Cosa faresti?
Questo sembra bello. Dovrò scavare di più per capire cosa significa 'out' per un parametro di tipo generico. Ad ogni modo, ho provato e ha funzionato. – Vaccano
Espandi la risposta con qualche informazione in più sulla parola chiave 'out'. –
Dolce! Grazie per la risposta espansa! – Vaccano