Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

int i = Conversions.ConvertToInt32(value);
float f = Conversions.ConvertToSingle(value);

Ответ 4

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

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

Convert.ToBoolean(var);

вместо

Converter.ConvertToBoolean(var);

Ответ 5

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

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

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

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

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

Это часто видно и в шаблоне singleton с свойством Instance.