正确处理特定的HTTP答案(特定于OOP)

时间:2014-06-21 16:17:49

标签: c# oop http

目前我正在为浏览器游戏编写机器人,并且有几个响应。 它们是未加密的,数据由正常的http响应提供。

因为有几种不同的响应类型和结构,我认为我可以使用我的(低)oop知识来处理这个 - 但我的概念不起作用。

我认为我可以为每个请求(登录请求,登出请求,攻击请求,收获请求,...)创建一个自己的类,它是来自基本请求类的子级。 我认为我可以为回应做同样的概念。

所以这是我的代码的一个小演示:

public class BasicRequest
{

     public BasicRequest(string serverId) { }

     public virtual BasicResponse DoRequest(string[] requestData)
     {
         // request is handled here
     }

}

public class LoginRequest : BasicRequest
{

     public LoginRequest(string serverId) : base(serverId) { }

}

public class BasicResponse
{

     public BasicResponse(string[] responseData) { }

     public virtual void DoSomeStuffWithTheResponse() { }
}

public class LoginResponse : BasicResponse
{

     public LoginResponse(string[] responseData) : base(responseData) { }

     public override void DoSomeStuffWithTheResponse() { }

}

这是我的基本结构(ofc我有更多的请求和响应类)。 现在我试着像这样使用它:

LoginResponse response = new LoginRequest("serverXX").DoRequest(new string[] { "data" }) as LoginResponse;

但是'响应'只是空的。 重要的是,它应该执行基类的构造函数所执行的操作(这是每个请求和响应需要的一些基本内容),然后是构造函数和特定类的重写(在这种情况下为loginrequest / response) )应该被称为。

希望你能帮助我,谢谢你的建议。

1 个答案:

答案 0 :(得分:1)

由于您未在DoRequest类中重写LoginRequest,因此在调用DoRequest时,将调用基类实现。

为了实现这一点,LoginRequest需要override基础实施:

public class LoginResponse : BasicResponse
{
    public LoginResponse(string[] responseData) : base(responseData) { }

    public override void DoSomeStuffWithTheResponse()
    { 
    }

    public override BasicResponse DoRequest(string[] requestData) 
    {
        // Do stuff
        return new LoginResponse();
    }
}