В настоящее время я пишу бота для браузера, и есть несколько ответов. Они незашифрованы, и данные предоставлены с помощью обычного ответа 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() { }
}
Это моя основная структура (из я имею еще несколько классов запросов и ответов). Теперь я попытался использовать его вот так:
LoginResponse response = new LoginRequest("serverXX").DoRequest(new string[] { "data" }) as LoginResponse;
Но тогда "ответ" равен нулю. Важно то, что он должен выполнять действия, которые выполняет конструктор базового класса (это некоторые базовые вещи, необходимые для каждого запроса и ответа), а затем конструктор и переопределение определенного класса (loginrequest/response в этом случае).
Надеюсь, вы можете помочь мне, спасибо в консультации.
Поскольку вы не переопределили DoRequest
в своем классе LoginRequest
, при вызове DoRequest
вызывается 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();
}
}
DoRequest(new string[] { "data" }) as LoginResponse
равенnull
. В этом случаеBasicResponse.DoRequest()
не возвращает LoginResponse, но, скорее всего, BasicResponse. Вам необходимо переопределить DoRequest () в вашем классе LoginRequest и вернуть LoginResponse.