В Java я могу сделать это с помощью ключевого слова extends в Generic Type, но в C # я не могу понять.
У меня есть 3 класса, один из которых является базовым классом.
public class BaseEntity {
public string Id {get;set;}
}
public class EntityA : BaseEntity {}
public class EntityB: BaseEntity {}
Тогда у меня есть фиктивный класс для набора данных.Для универсального типа минимальное ограничение - BaseEntity
public class MockDataStore<T> : IDataStore<T> where T : BaseEntity
{
List<T> items = new List<T>();
public async Task<bool> AddAsync(T item)
{
}
public async Task<bool> UpdateAsync(T item)
{
}
public async Task<bool> DeleteAsync(T item)
{
}
}
. Но когда я хочу добавить один из дочерних классов в список items
, компилятор говорит, что это невозможно.
Невозможно преобразовать из EntityA в T
items.Add(new EntityA());
Я хочу использовать универсальный тип из-за методов Add, Update и Delete.
Да, если я использую List<BaseEntity> = new List<BaseEntity>()
, я не получу сообщение не может преобразовать .Но в этом случае методы Add, Update и Delete будут неправильными.
Однако я добавил where T : BaseEntity
это ограничение и грр.
Я хочу добиться того, чтобы T : BaseEntity
набрал items
список, заполненный дочерними элементами BaseEntity
.
Как я могу это сделать?