Для веб-разработки Вы могли бы хотеть взглянуть на hunchentoot, веб-сервер, записанный в языке Common LISP.
Равно
IComparable
Nullable
) Золотое правило не для перегрузки операторов, если смысл не совсем очевиден. Например, я думаю, что было бы довольно странно иметь оператор + в Stream
- это могло бы означать «сделать записываемый T здесь, чтобы запись результата записывалась в оба» или это могло означать «читать один за другим "или, возможно, другие вещи.
По моему опыту, довольно редко можно перегружать что-либо, кроме == и! =.
Я думаю, что Руководство по проектированию фреймворка дает хороший совет:
- ИЗБЕГАЙТЕ определения перегрузок операторов, за исключением типов, которые должны выглядеть как примитивные (встроенные) типы.
- РАССМАТРИВАЙТЕ определение перегрузок операторов в типе, который должен ощущаться как примитивный тип.
- ОБЯЗАТЕЛЬНО определяют перегрузки операторов в структурах, представляющих числа (например, System.Decimal).
- НЕ СОБИРАЙТЕСЬ при определении перегрузок оператора.
- НЕ предоставляйте перегрузки оператора, если хотя бы один из операндов не относится к типу, определяющему перегрузку.
- DO перегрузить операторы симметричным образом.
- РАССМАТРИВАЙТЕ предоставление методов с понятными именами, соответствующими каждый перегруженный оператор.
Я рассматриваю переопределяющие операторы в следующих случаях:
Я бы подумал использование перегрузки оператора для арифметических операций с типами, представляющими логическое значение. Например, были случаи, когда мне хотелось, чтобы Точка
имела перегрузку для операторов +
и -
.
Я просил закрыть это, но, возможно, он может остаться открытым (я пытался передумать, но, видимо, вы не можете отозвать запрос на закрытие: P)
Я отвечу лично : never .
Я никогда не думаю, что реализовать перегрузку операторов - хорошая идея. Есть только одно исключение: если я пишу какую-то коллекцию (это случается не очень часто) и хочу реализовать индексаторы []
.
По моему личному мнению, я не думаю, что когда-либо подходит для переопределения ==
и других подобных вещей. Но опять же, я не работаю в сложных областях математики и финансов, где такие вещи могут быть полезными. Но я не могу говорить, исходя из своего опыта в этом вопросе (на самом деле, я могу в финансовом мире, и мы не сделали этого там).