Я пытаюсь написать фабричный метод, который создаст производный экземпляр абстрактного универсального класса коллекции. Вот базовые классы ...
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>
.
Может кто-нибудь указать мне правильное направление? Спасибо.