Supponiamo di avere la seguente classe:Passando una collezione Interface
class Car : IPainting
{
...
}
Poi una funzione come questa:
void AddCars(IEnumerable<Car> collection)
Poi un frammento di codice come questo:
Car bmw = new Car();
Car mercedes = new Car();
IPainting a = (IPainting) bmw;
IPainting b = (IPainting) mercedes;
IPainting[] paintings = new IPainting[] {a, b};
AddCars(paintings); // fails to compile
Questo, Naturalmente non viene compilato perché il metodo AddCars() accetta solo una raccolta di Cars ma è ciò che è costituito dall'array 'paintings'.
So che C# 4.0 probabilmente fornirà una soluzione per questo. C'è qualche soluzione per oggi?
Grazie,
Alberto
C# 4.0 non fornirà un soluzione per il codice che hai qui. Non sarai mai in grado di passare qualcosa di un tipo che è più alto nell'ereditarietà raglia a un metodo che si aspetta qualcosa di più basso. Come altri hanno sottolineato, il tuo metodo dovrebbe prendere in considerazione IPainting - non Car per farlo funzionare. –