У меня есть следующие классы: Почему мой производный класс не переводится в базовый класс?
public class Item
{
}
public class ItemCollection<TItem> : ICollection<TItem> where TItem : Item, new()
{
}
у меня есть два производных класса:
public class Feature : Item
{
}
public class Features : ItemCollection<Feature>
{
}
У меня есть класс менеджера по управлению такими коллекциями:
public class ItemCollectionManager<TCollection> where TCollection : ItemCollection<Item>, new()
{
}
Я пытался используйте этот класс:
public class FeatureManager : ItemCollectionManager<Features>
{
}
, но это приводит к:
«Тип Features
должен быть конвертированы в ItemCollection<Item>
для того, чтобы использовать его в качестве TCollection в родовом классе ItemCollectionManager<TCollection>
».
И, как уже упоминалось ранее,
Features
является разновидностью ItemCollection<Feature>
и
Feature
является разновидностью Item
.
Я не верю, что интерфейсы являются идеальным решением для этой задачи, но я желаю изменить, если причина предоставляется.
Если кто-нибудь может посоветовать, что я делаю неправильно, это будет очень признательно.
спасибо.
+1 для ковариации и ссылок. И я понятия не имел, что вы можете украсить аргументы типа in/out. –
@ MalcolmO'Hare приветствую вас - да, это может быть полезно в определенных сценариях – NSGaga