@Anton_repr

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

Искал проекты для разбора и обнаружил такой код: 5ed75c0aaa579747128461.png
Мне кажется, что вместо классов здесь должны быть перечисления?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 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#
http://iczin.su/hexagram_48
программирование интересная штука - работает? не трогай!
Мне кажется, что вместо классов здесь должны быть интерфейсы?
в тексте вопроса
Стоит ли использовать здесь перечисления?
вы уж определитесь в хотелках:
- перечисления?
- интерфейсы?
- и то и другое?
.. а зачем? (с) из хорошего анекдота
а мораль простая - если понимаете зачем? выпиливайте, тестируйте, пользуйтесь!

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

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

Похожие вопросы