@Anton_repr

Стоит ли использовать здесь перечисления?

Искал проекты для разбора и обнаружил такой код: 5ed75c0aaa579747128461.png
Мне кажется, что вместо классов здесь должны быть перечисления?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
Collin
@Collin
Стоит, так будет удобнее и понятнее.
namespace TryEnum
{
    enum DownloadType
    {
        Video, Audio, Custom, Unknown, Default
    }
    enum ForceIpProtocol
    {
        IPv4, IPv6
    }
    enum ProxyProtocol
    {
        HTTPS, HTTP, SOCKS4, SOCKS5
    }
}


А использовать вот так:
5ed7670d68591771166057.png

А по поводу интерфейсов... Интерфейсы не должны быть вместо классов; класс реализует интерфейс (выглядит синтаксис как наследование class ClassName : IClassName, но это не совсем наследование, там немножко другая реализация). И интерфейс нужен в том случае, если нужно реализовать полиморфизм в коде и/или что бы упростить доступ к публичным полям в классах, которые реализуют этот интерфейс.
Например: у нас есть много классов с разными реализациями, но их всех объединяют одни и те же свойства (к приеру свойства public string Name ( get; set; ); public int Age( get; set; ); и тд...). Интерфейс в данном случае нужен для того, что бы через него мы получали доступ ко множественному поведению, при помощи разных классов, содержащих одноименные свойства, не плодя при этом код.

Для наглядности:

у нас есть метод Create(); в котором мы хотим создавать новых людей

static void Create()
        {
            // empty...
        }


Есть разные классы, которые создают Human и реализуют интерфейс IHuman

class SimpleHuman : IHuman
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public SimpleHuman()
        {
            Name = "Generic human...";
            Age = 20;
        }
        public SimpleHuman(string name) : this()
        {
            Name = name;
        }
        public SimpleHuman(string name, int age) : this()
        {
            Name = name;
            Age = age;
        }
    }


class CoolHuman : IHuman
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public CoolHuman()
        {
            Name = "BOB!";
            Age = 20;
        }
        public CoolHuman(string name) : this()
        {
            Name = name;
        }
        public CoolHuman(string name, int age) : this()
        {
            Name = name;
            Age = age;
        }
    }


interface IHuman
    {
        string Name { get; set; }
        int Age { get; set; }
    }


И теперь, благодаря реализации интерфейса в этих классах мы можем удобно использовать этот самый интерфейс, например:
class Create
    {
        public IHuman Human { get; set; }
        public Create()
        {
            Human = new CoolHuman();
        }
        public void Hello()
        {
            Console.WriteLine("Hello, {0}. Today you are {1} years old", Human.Name, Human.Age);
        }
    }


Конкретно в вашем случае интерфес не нужен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mindtester
@mindtester Куратор тега C#
движение жизнь!.. а ожидание - нет
программирование интересная штука - работает? не трогай!
Мне кажется, что вместо классов здесь должны быть интерфейсы?
в тексте вопроса
Стоит ли использовать здесь перечисления?
вы уж определитесь в хотелках:
- перечисления?
- интерфейсы?
- и то и другое?
.. а зачем? (с) из хорошего анекдота
а мораль простая - если понимаете зачем? выпиливайте, тестируйте, пользуйтесь!

ps со стороны, все это невозможно оценить без детально расписанных сценариев использования
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
СМАРТ-СОФТ Волгоград
от 60 000 до 90 000 ₽
Across Systems Новосибирск
До 180 000 ₽
Технология Екатеринбург
от 60 000 до 150 000 ₽