Dato il codice qui sotto:Come forzare abbattuta sui farmaci generici
class Animal
{ }
class Dog : Animal
{ }
class Cage<T>
{
private T animal;
public Cage(T animal)
{
this.animal = animal;
}
public T Animal
{
get { return animal;}
}
}
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
Cage<Animal> animalCage = new Cage<Animal>(dog);
Cage<Dog> dogCage = (Cage<Dog>)animalCage;
}
}
Come posso aggirare l'ultimo errore del compilatore (conversione da animalCage a dogCage)?
Nel mio codice So che la gabbia contiene un cane, ma non riesco a trovare un modo per eseguire il cast. È il mio alternativa unica per creare un convertitore e creare un nuovo gabbia <Dog> esempio dal valore di un Gabbia <Animal>?
Si può sapere che la gabbia contiene un cane, ma il * tipo di sistema * non lo fa. I generici Java ti lasciano fuori con un avviso perché gli argomenti generici vengono cancellati durante la compilazione, ma i generici CLR vengono mantenuti in runtime. –
Hai ragione ... la mia domanda era esattamente se c'è una dichiarazione speciale (o una parola chiave C#) per dire al compilatore "spingere me" :) – user1778378
Nessuna fortuna - non c'è modo di disattivare l'applicazione di tipo generico CLR in fase di esecuzione . –