Как часто вы создаете неявные преобразования для ваших классов? - PullRequest
7 голосов
/ 06 апреля 2010

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

Спасибо

1 Ответ

4 голосов
/ 06 апреля 2010

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

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

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

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

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

...