目前我正在为浏览器游戏编写机器人,并且有几个响应。 它们是未加密的,数据由正常的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) )应该被称为。
希望你能帮助我,谢谢你的建议。
答案 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();
}
}