c# - c#泛型用抽象方法

我正在尝试实现一个抽象类的泛型方法,如下所示:


public abstract class MyAbstractClass : MyBaseObject {


 public MyAbstractClass() : base() { } // there is a parameterless constructor...


}



public class MyList<T> where T : MyBaseObject, new() {


 // a generic container that is designed for the base class


}



//--- some paint control of mine


public class PaintControl : IDisposable {


 public void InitDrawItems(MyList<MyAbstractClass> items) {


 // paint items => this is where the compilation error occurs...


 } 


}



我得到以下编译错误:

Error 24'MyAbstractClass'must be a non-abstract type with a public parameterless constructor in order to use it as parameter'T'in the generic type or method'MyList'

我想使用抽象的MyAbstractClass类(它有几个子类相应地去处理绘画)。有没有解决的办法?

时间:

类中的类型参数不能在类型之间隐式转换,在MyList<MyBaseObject>MyList<MyConcreteObject>之间没有继承关系。

仅允许泛型接口或委托进行转换。

修复此问题有两种方法-使用接口代替具体类,例如:


class MyList<T>:IList<T> where T : MyBaseObject, new() 


{



}



class PaintControl {


 public void InitDrawItems<T>(IList<MyAbstractClass> items) //where T:MyAbstractClass,new()


 {


 //var anItem=new T();


 } 


}



或使InitDrawItems本身成为泛型:


public void InitDrawItems<T>(MyList<T> items) where T:MyAbstractClass,new()


{


 // No compilation errors here


} 



...