由于泛型基类,不能使用多态

Cap*_*mic 2 c# generics polymorphism

我创建了基本泛型类,没有只有一个方法的字段

public class Base<T> where T:class
{
  public static T Create()
  {
     // create T somehow
  }
}

public class Derived1 : Base<Derived1>
{
}

public class Derived2 : Base<Derived2>
{
}


public class Program
{
    bool SomeFunction()
    {
     // Here I need reference to base class
     Base baseref; // error here 

     switch(somecondition)
     {
       case 1:
        baseref = Derived1.Create();
       break;

       case 2:
        baseref = Derived1.Create();
       break

     }

     // pass baseref somewhere     
    }
}
Run Code Online (Sandbox Code Playgroud)

一个明显的选择是将基类转换为接口,但这是不可能的,因为接口不能包含静态方法.

我想我需要一些中级基类.请建议

Alb*_*nbo 6

您必须从Base类中删除泛型参数,您可以将其移动到Create方法:

public class Base 
{
    public static T Create<T>() where T : class
    {
        return Activator.CreateInstance<T>();
    }
}

public class Derived1 : Base
{
}

public class Derived2 : Base
{
}
Run Code Online (Sandbox Code Playgroud)