Voglio solo confermare quello che ho capito su Generics in C#. Questo è venuto fuori in un paio di basi di codice in cui ho lavorato in cui una classe base generica viene utilizzata per creare istanze derivate dal tipo sicuro. Un esempio molto semplice di quello che sto parlando,C# Generici e polimorfismo: un ossimoro?
public class SomeClass<T>
{
public virtual void SomeMethod(){ }
}
public class DeriveFrom :SomeClass<string>
{
public override void SomeMethod()
{
base.SomeMethod();
}
}
Il problema si presenta quando poi voglio usare le istanze derivate in modo polimorfico.
public class ClientCode
{
public void DoSomethingClienty()
{
Factory factory = new Factory();
//Doesn't compile because SomeClass needs a type parameter!
SomeClass someInstance = factory.Create();
someInstance.SomeMethod();
}
}
Sembra che una volta che si introduce un generico in una gerarchia o interfaccia eredità, non è più possibile utilizzare quella famiglia di classi in modo polimorfico se non forse interno a se stesso. È vero?
Mi sembra che SomeClass sia la classe base di DeriveFrom, non SomeClass, che è ciò che sembra credere che dovrebbe essere. –
Thanatos