c# - 是否可以为不同的类型创建一个通用的抽象父类?

标签 c# generics inheritance abstract-class

我很好奇是否有可能像父抽象类那样创建我可以在其中定义一组特定方法但子类包含不同实体类型的抽象类?代码示例:

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<"of Type">(在本例中为类别)。此外,我可能想做 public override Add(int CategoryID)而不是继承的 Add来自 BaseService .

这可能吗?想法?我只是疯了吗?还是我想让它变得比它需要的更复杂?我有大约 10 种不同的服务类型,我想确保从 BaseService 中获取这些通用方法。 .

提前致谢!

最佳答案

如果我理解正确的话,你可以这样做:

public abstract class BaseService<T>
{
    public abstract T Get();        
}

然后:

public class CategoryService : BaseService<Category>
{
    public override Category Get(){ ... }
}

您不能覆盖方法并且在覆盖中有不同的签名,但您可以使用字典/哈希表或更花哨的东西将参数传递到 Add 方法。使用通用容器传递参数意味着您开始使用查询 模式,其中容器中的参数决定查询(仅供引用:-))。

关于c# - 是否可以为不同的类型创建一个通用的抽象父类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37483552/

相关文章:

c# - 实现接口(interface)但返回返回类型的子类?

java - 如何仅使用父类,即使被覆盖

c# - 异常处理程序中间件未捕获

c# - 如何使用 Mono C# 截取屏幕截图?

java - 在 Java 树结构中存储方程

ios - 在 objective-c 泛型中,我可以将类型从一个类传递到另一个类吗

c# - Ajax.ActionLink 不调用 Controller Action

c# - 如何获取实际日期时间的日期时间格式字符串?

c# - 我可以创建一个 List<Class<T>> 吗?

Java非泛型方法隐藏具有交集类型的泛型方法