Как System.Convert подходит для соглашений OO?

17

Не являются ли классы вызываемыми после объектов, а не действиями? Он просто не сидит вместе с теорией ОО, которую я узнал.

Одна мысль заключалась в том, что, возможно, поскольку Преобразование содержит только статические методы, а не экземпляры он должен быть создан вообще, что может сделать его приемлемым исключением.

    
задан Quaker 04.03.2014 в 10:28
источник

5 ответов

18

В C # вы не можете создавать методы вне классов или структур. Поэтому, когда вы хотите создавать утилиты, лучше хранить их в статическом классе.

Итак, я бы сказал, что нет ничего ориентированного на объект статического класса.

    
ответ дан Raz Megrelidze 04.03.2014 в 10:43
источник
9

Нет ничего объектно-ориентированного в классе Преобразовать , поскольку объектная ориентация о данных с поведением , а класс Convert не содержит данных или состояний.

Это в основном практическое рассмотрение.

В Eiffel, например, методы преобразования были бы определены в базовом классе, и все классы, которые должны использовать методы преобразования, были бы получены из этого базового класса. Однако Eiffel имеет множественное наследование, поэтому это имеет смысл для Eiffel, но не для языка, такого как C #, где у вас нет множественного наследования.

    
ответ дан Mark Seemann 04.03.2014 в 10:36
источник
5

Ваша мысль верна. Convert - статический класс утилиты, с одной целью - преобразование между различными типами.

Он имеет только методы (глаголы), которые все они являются преобразованиями - поэтому для удобства чтения лучше всего использовать имя общего глагола самому классу, чем повторять его в каждом методе:

int i = Convert.ToInt32(value);
float f = Convet.ToSingle(value);

гораздо более свободно и читабельны, чем:

int i = Conversions.ConvertToInt32(value);
float f = Conversions.ConvertToSingle(value);
    
ответ дан Shlomi Borovitz 04.03.2014 в 10:41
источник
4

Мое личное мнение заключается в том, что ОК для класса Convert, который вызывается после действия, потому что это статический класс и не будет установлен.

Просто звучит лучше позвонить

Convert.ToBoolean(var);

вместо

Converter.ConvertToBoolean(var);
    
ответ дан Fedor Hajdu 04.03.2014 в 10:33
источник
4

Соглашения об именах - забавные звери. Самое главное - это согласованность между фреймворками.

Излишне говорить, что соглашения OO могут реально помочь разборчивости архитектуры. В этом случае класс преобразования и его статические методы представляют собой замены best try для глобальных функций с помощью c # и им присваиваются имена fluid , указывающие как таковые.

  

Преобразовать [параметр] в Int32

     

Преобразовать [параметр] в одиночный

Называя их как действия, а не объекты, мы также сообщаем функциональную чистоту.

Это часто наблюдается в шаблоне singleton, а также с свойством Instance .

    
ответ дан Gusdor 04.03.2014 в 10:34
источник