C# подскажите как передать класс в метод

  • Автор темы Автор темы Dmitriy Ka
  • Дата начала Дата начала

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
951
Реакции
735
Баллы
93
Есть такой код

C#:
Развернуть Свернуть Копировать
public static class MyProxy
{
    public static string Token{ get; set; }
    
    public static void GetBalance(IZennoPosterProjectModel project)
    {
        if (String.IsNullOrEmpty(Token)) throw new Exception(TokenNULL);
        string HttpGet = ZennoPoster.HTTP.Request
                (
                    ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET, ПЕРЕДАТЬ СЮДА НУЖНЫЙ КЛАСС.getBalance + Token,
                    respType:ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, Timeout:15000
                );
    }
    
public static class AstroProxy
{
    public static string getBalance = "https://astroproxy.com/api/v1/balance?token=";
}

public static class Proxy6
{
    public static string getBalance = "https://proxy6.net/api/";
}

Подскажите, как можно в строке #10 передовать нужный класс. То есть во входных настройках я выбираю прокси с которыми хочу работать, а в строке #10 подставляется нужный класс.
 
делаешь еще одну процедуру, которая распарсит строку и через свитч в ней же вызываешь нужную процедуру с нужным классом.
 
  • Спасибо
Реакции: Dmitriy Ka
делаешь еще одну процедуру, которая распарсит строку и через свитч в ней же вызываешь нужную процедуру с нужным классом.
А другие варианты есть, чтобы не копировать одно и тоже?
 
Поскольку нужные классы у вас статические, то их можно передать как AstroProxy.getBalance или Proxy6.getBalance
Это да, вопрос в том, как их передать так, чтобы их можно было менять на нужный?
 
Это да, вопрос в том, как их передать так, чтобы их можно было менять на нужный?
сделайте свитч с формированием нужного значения в переменную, а эту переменную подставлять в параметр
 
  • Спасибо
Реакции: Dmitriy Ka
Спасибо за помощь, разобрался!

C#:
Развернуть Свернуть Копировать
public static class MyProxy
{
    public static string Token{ get; set; }
    
    public static void GetBalance(IZennoPosterProjectModel project, bool lowBalance = true)
    {
        var ProxyServer = project.Variables["cfgProxyServer"].Value;
        if (String.IsNullOrEmpty(Token)) throw new Exception(TokenNULL);
        string HttpGet = ZennoPoster.HTTP.Request
                (
                    ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET, getBalance.Url() + Token,
                    respType:ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, Timeout:15000
                );
    }
}

public static class ProxyServer
{
    public static string _proxyServer { get; set; }
}

public static class getBalance
{
    
    public static string Url()
    {
        switch (ProxyServer._proxyServer)
        {
            case "AstroProxy":
            return "http://astroproxy.com/api/v1/balance?token=";

            case "Proxy6":
            return "https://proxy6.net/api/";

            default:
            throw new Exception("Не выбран Proxy Server");
        }
    }
}
 
Только теперь встает вопрос, для чего я это сделал:-). У меня все в статике, а значит запустить 2 шаблона под разными Прокси серверами у меня не получится. Все перемешается. А если убирать статик то тогда пропадает смысл подгружать прокси через апи, для каждого потока будет новый список с прокси
 
Спасибо за помощь, разобрался!

C#:
Развернуть Свернуть Копировать
public static class MyProxy
{
    public static string Token{ get; set; }
   
    public static void GetBalance(IZennoPosterProjectModel project, bool lowBalance = true)
    {
        var ProxyServer = project.Variables["cfgProxyServer"].Value;
        if (String.IsNullOrEmpty(Token)) throw new Exception(TokenNULL);
        string HttpGet = ZennoPoster.HTTP.Request
                (
                    ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET, getBalance.Url() + Token,
                    respType:ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, Timeout:15000
                );
    }
}

public static class ProxyServer
{
    public static string _proxyServer { get; set; }
}

public static class getBalance
{
   
    public static string Url()
    {
        switch (ProxyServer._proxyServer)
        {
            case "AstroProxy":
            return "http://astroproxy.com/api/v1/balance?token=";

            case "Proxy6":
            return "https://proxy6.net/api/";

            default:
            throw new Exception("Не выбран Proxy Server");
        }
    }
}

говнокод получается, следуешь логике: класс, это набор каких-то методов

нарушение dry, solid

не сможешь потом это переиспользовать, будешь каждый раз писать все с 0, а не использовать наработки.
необходимо, как минимум делать конечные методы, с входными параметрами, а у тебя переменные вшиты внутри
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)