Как часто Вы создаете неявные преобразования для своих классов?

Я разрабатывал приложения.NET в течение 4 лет. До сих пор я не должен был создавать неявные преобразования для классов, которые я создал.
Вы могли обеспечить реальные ситуации, когда Вы не могли обойтись без создания неявных преобразований?

Спасибо

7
задан Vitali Climenco 6 April 2010 в 06:29
поделиться

1 ответ

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

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

Неявное преобразование может быть оправдано, если у вас есть два типа данных, которые хранят данные в одном и том же формате, но единственное различие между типами - семантическое - как они используются или что они означают.Пример из реальной жизни: преобразование между типами данных datetime, которые имеют одинаковое (или совместимое) базовое представление, но отличаются только датой начала epoc. Вы найдете их при переносе старых кодовых баз на новые фреймворки, где оба определяют тип datetime, но семантика немного отличается. Неявное преобразование здесь (при условии, что данные вообще не потеряны), вероятно, нормально и хорошая идея.

Если у вас есть набор типов и вы определили свои собственные правила преобразования типов между собой, то некоторые из этих преобразований могут быть неявными, а некоторые - явными, в зависимости от «серьезности» преобразования. Основным случаем, когда я использовал неявное преобразование при реализации класса в .NET, был случай, когда я реализовывал семантику Win32 Variant для библиотеки времени выполнения Delphi. Win32 и язык Delphi определяют количество преобразований данных Variant, которые могут быть выполнены неявно.

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

4
ответ дан 7 December 2019 в 14:30
поделиться
Другие вопросы по тегам:

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