C # Дженерики и полиморфизм: оксюморон?
Я просто хочу подтвердить, что я понял о Generics в C #. Это произошло в паре базовых кодов, в которых я работал, где универсальный базовый класс используется для создания безопасных типов производных экземпляров. Очень простой пример того, о чем я говорю,
public class SomeClass<T>
{
public virtual void SomeMethod(){ }
}
public class DeriveFrom :SomeClass<string>
{
public override void SomeMethod()
{
base.SomeMethod();
}
}
Проблема возникает тогда, когда я хочу использовать производные экземпляры полиморфно.
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();
}
}
Кажется, что когда вы вводите Generic в иерархию или интерфейс наследования, вы больше не можете использовать это семейство классов полиморфно, за исключением, возможно, внутреннего для себя. Это правда?