[英]How can I add child object to the parent generic type in c#
在 java 中,我可以使用泛型类型中的 extends 关键字来做到这一点,但在 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());
由于添加、更新和删除方法,我想使用泛型类型。
是的,如果我使用List<BaseEntity> = new List<BaseEntity>()
那么我将不会收到无法转换的消息。 但在这种情况下,添加、更新和删除方法将是错误的。
但是我添加了where T : BaseEntity
这个约束和 grr。
我想要实现的是T : BaseEntity
类型的items
列表填满了BaseEntity
的子项目。
我该怎么做?
我认为您在这里有两个选择:
我认为您在课堂级别不需要泛型。 您可以只拥有一个基类列表并使用它:
public class MockDataStore
{
List<BaseEntity> items = new List<BaseEntity>();
public async Task<bool> AddAsync(BaseEntity item)
{
}
public async Task<bool> UpdateAsync(BaseEntity item)
{
}
public async Task<bool> DeleteAsync(BaseEntity item)
{
}
}
这可能不是你想要的,因为你最终会得到多个类,但我会把它留在这里以防万一:
public abstract class MockDataStoreBase<T> : IDataStore<T> where T : BaseEntity
{
protected List<T> items = new List<T>();
public virtual async Task<bool> AddAsync(T item)
{
}
public async Task<bool> UpdateAsync(T item)
{
}
public async Task<bool> DeleteAsync(T item)
{
}
}
public class EntityADataStore : MockDataStoreBase<EntityA>
{
public override async Task<bool> AddAsync(EntityA item)
{
bool result = await base.AddAsync(item);
}
//...
}
现在, EntityADataStore.items
将是List<EntityA>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.