我正在尝试编写一个工厂方法,该方法将创建抽象泛型集合类的派生实例。这是基类...
abstract class ItemBase { }
abstract class CollectionBase<T> : Collection<T> where T : ItemBase, new() { }
...及其派生类...
class Item : ItemBase { }
class ItemCollection : CollectionBase<Item> {}
现在,我想要一个创建 ItemCollection 的工厂方法。但请注意,派生类 Item 和 ItemCollection 对于包含此工厂方法的类来说是未知的。这就是我想象的应该是这样的......
static T CreateItemCollection<T>() where T : CollectionBase<ItemBase>, new()
{
return new T();
}
...我想像这样调用它...
var collection = CreateItemCollection<ItemCollection>();
但是工厂方法不会编译,因为 ItemBase 必须有一个无参数的构造函数。并且调用调用拒绝相信ItemCollection
源自CollectionBase<ItemBase>
。
有人可以指出我正确的方向吗?谢谢。