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

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
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 подставляется нужный класс.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
делаешь еще одну процедуру, которая распарсит строку и через свитч в ней же вызываешь нужную процедуру с нужным классом.
 
  • Спасибо
Реакции: Dmitriy Ka

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
делаешь еще одну процедуру, которая распарсит строку и через свитч в ней же вызываешь нужную процедуру с нужным классом.
А другие варианты есть, чтобы не копировать одно и тоже?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
Поскольку нужные классы у вас статические, то их можно передать как AstroProxy.getBalance или Proxy6.getBalance
Это да, вопрос в том, как их передать так, чтобы их можно было менять на нужный?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113
Это да, вопрос в том, как их передать так, чтобы их можно было менять на нужный?
сделайте свитч с формированием нужного значения в переменную, а эту переменную подставлять в параметр
 
  • Спасибо
Реакции: Dmitriy Ka

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
Спасибо за помощь, разобрался!

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");
        }
    }
}
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
Только теперь встает вопрос, для чего я это сделал:-). У меня все в статике, а значит запустить 2 шаблона под разными Прокси серверами у меня не получится. Все перемешается. А если убирать статик то тогда пропадает смысл подгружать прокси через апи, для каждого потока будет новый список с прокси
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
455
Баллы
63
Спасибо за помощь, разобрался!

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, а не использовать наработки.
необходимо, как минимум делать конечные методы, с входными параметрами, а у тебя переменные вшиты внутри
 

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