我很好奇是否有可能创建父抽象类,我可以定义一组特定的方法,但是子类包含不同的实体类型?代码示例:
public abstract class BaseService
{
public abstract void Add();
public abstract void Delete();
public abstract void Update();
public abstract void Get();
}
也许可以做public abstract List<'random type'> GetAll();
但是在这里我想要使用特定于每个子节点的特定参数覆盖每个方法:
public class CategoryService : BaseService
{
public override void Add(){ }
public override void Delete(){ }
public override void Update(){ }
public override void Get(){ }
}
但是,在我的子课程中,我希望我的Get()方法返回一个特定的List&lt;“of Type”&gt; (在这种情况下类别)。此外,我可能希望public override Add(int CategoryID)
代替Add
中的继承BaseService
。
这可能吗?思考?我只是疯了吗?或者我是否想让它变得比它需要的更复杂?我有大约10种不同的服务类型,我希望确保从BaseService
获取这些通用方法。
提前致谢!
答案 0 :(得分:4)
如果我理解正确,你可以这样做:
public abstract class BaseService<T>
{
public abstract T Get();
}
然后:
public class CategoryService : BaseService<Category>
{
public override Category Get(){ ... }
}
您无法覆盖方法并在覆盖中使用不同的签名,但您可以使用字典/散列表或更奇特的东西将参数传递到Add
方法。使用通用容器传递参数意味着您开始使用查询模式,其中容器中的参数确定查询(仅用于信息: - ))。
答案 1 :(得分:1)
尝试使用通用类型
public abstract List<T> GetAll<T>();
并在您的子课程中返回适当的类型
<强>更新强>
@ pw94回答也是实现这一目标的好方法,但唯一的问题是你不能为不同的方法提供多种类型,只有一种类型在你继承类后才能工作。
答案 2 :(得分:0)
您可以创建抽象泛型类:
public abstract class BaseService<T>
{
public abstract void Add();
public abstract List<T> Get();
}
并实施:
public class CategoryService : BaseService<int>
{
public override void Add(){ ... }
public override List<int> Get(){ ... }
}