c# - 用抽象类型实现抽象类

标签 c# generics inheritance abstract-class

我有一个基础抽象类,它接受来自抽象类的类型,我正在用头撞墙试图弄清楚如何正确地实现它。

基类:

public abstract class ApiService<TRequest, TResponse>
    where TRequest : ApiRequest
    where TResponse : ApiResponse
{
    public abstract TResponse Execute(TRequest Request);
}

ApiRequest 类:

public abstract class ApiRequest
{

}

ApiResponse 类:

public abstract class ApiResponse
{
    public bool Succeeded { get; set; }

}

我已经创建了一个 TestService 类来尝试解决这个问题,但是这些概念对我来说并没有融合在一起:

public class TestService : ApiService<ApiRequest, ApiResponse>
{
    public override ApiResponse Execute(ApiRequest Request)
    {
        ApiResponse response;

        return (response);
    }

如果您能提供任何帮助,我将不胜感激,并帮助我进一步理解抽象类!谢谢!

所以我的问题是:我不知道如何在 Execute 方法中实现 ApiResponse,因为您无法实例化抽象类。

最佳答案

Generics 和 Polymorphizem 很好,但它必须在某个时候停止。在你的情况下,你有一个很好的 API 接口(interface),很明显你传递了一个 TRequest并收到 TResponse

您应该添加的是如何处理具体情况。添加一层IRequestHander<TRequest,TResult>知道如何创建特定的 Result来自特定的 Request .

然后使用 Factory设计模式,您的 API 函数将调用工厂以获取适合它收到的请求的特定处理程序。它将执行 RequestHander并将返回 Response它从中得到的。

public class SpecificRequestA : ApiRequest {}
public class SpecificResponseA : ApiResponse{}

public interface IRequestHander<TRequest,TResponse>
    where TRequest : ApiRequest
    where TResponse : ApiResponse
{
    TResponse Exeute(TRequest request);
}

public class SpecificRequestHandlerA : IRequestHander<SpecificRequestA,SpecificResponseA>
{
    SpecificResponseA Execute(SpecificRequestA request)
    {
        //create the new response out of the given request. Here you know exactly on what you are working :)
    }
}

然后添加工厂。

还考虑将请求实现为 Request<TResponse> - 看看它是否更适合你的情况

我建议研究依赖注入(inject)和 DI 容器(如 CaSTLe、Ninject、Unity、Simple Injector)以 负责初始化。

关于c# - 用抽象类型实现抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40008602/

相关文章:

java - 运行抽象构造函数,然后转换为子类

c# - 未呈现后台工作窗口控件

Java 泛型 : parametricise a generic type

C# 在离开 accept_button 事件之前进行验证

c# - 如何将 List<T> 初始化为给定大小(相对于容量)?

java - 我可以简化这个 Java 泛型层次结构吗

ios - 添加带有自定义图像的新 UIButton "state"

oop - 如何让抽象的依赖属性起作用

c# - SharpDX 将 2D 多边形渲染到屏幕外位图

c# - 在c#中将结构转换为char指针