泛型类定义:类型参数';s在抽象方法中使用的类型参数
本文关键字:类型参数 抽象方法 定义 泛型类 | 更新日期: 2023-09-27 18:21:35
我根本不确定在这里使用什么关键字,但是:我正在尝试为实体和集合创建泛型基类,但不知道如何将KeyType
类型传递给EntityCollection
的抽象方法。问题的所有部分都打上问号。
public abstract class Entity<KeyType> {
public KeyType id;
public Entity(KeyType id) {
this.id = id;
}
}
public class Product: Entity<string> {} // Product has a string identifier
public abstract class EntityCollection<EntityType> : Where EntityType:Entity<?> {
public abstract EntityType Get(?keytype? id);
public abstract void Add(EntityType entity);
public abstract IEnumerable<EntityType> GetAll();
}
public class Inventory : EntityCollection<Product> {
public Product Get(?keytype? id) { ... }
public void Add(Product item) { ... }
...
}
....
var productCode = "12345";
var list = new Inventory();
list.Add(new Product(productCode));
var foundproduct = list.Get(productCode);
我是从错误的角度看待这个问题,还是遗漏了什么?我可以做EntityCollection<EntityType,KeyType> : Where EntityType:Entity<KeyType>
,但我觉得信息已经存在于定义中,这只是重复它,使定义过于复杂。
(实际的代码也有接口,我试着把它缩短)
解决这一问题的关键是要意识到EntityCollection
需要更多的类型信息,以便您可以指定您所拥有的类型?'s:
public abstract class EntityCollection<EntityType, T> where EntityType : Entity<T>
{
public abstract EntityType Get(T id);
public abstract void Add(EntityType entity);
public abstract IEnumerable<EntityType> GetAll();
}
Inventory
变为:
public class Inventory : EntityCollection<Product, string>
{
public override Product Get(string id) { ... }
public override void Add(Product item) { ... }
...
}