Учебник Ответ:
Перегрузка операторов не является частью Спецификации общего языка, то есть разработчики компиляторов могут игнорировать ее или поддерживать только частично, если они этого хотят. Как автор библиотеки вы несете ответственность за предоставление людям альтернативных способов работы с классом.
Прагматичный ответ:
Потому что это глупо, в первую очередь. Метод op_GreaterThan был явно создан для сравнения. Что это, вы не должны делать «интересные» вещи с этим, как объединение двух терминов. CLR позволяет вам злоупотреблять этим только потому, что он должен поддерживать устаревшие языки, такие как C ++.
Кстати, существует перегрузка специально для объединения двух вещей. Это называется op_Concatenate. Вы действительно должны рассмотреть возможность его использования вместо op_GreaterThan.
EDIT
Почти Хороший Ответ:
В F # оператор конкатенации, о котором я упоминал, был ^.
Я называю это почти хорошим ответом, потому что я не уверен, что C # поддерживает это. Я думаю, что это разрешено только в VB и F #.
РЕДАКТИРОВАТЬ # 2
Кажется, что F # не соблюдает перегрузку ^ в конце концов.
РЕДАКТИРОВАТЬ # 3
WTF здесь происходит? F # вообще не поддерживает оператор>. Конечно, вы можете перегрузить его, и он будет правильно генерировать метод op_GreaterThan, но игнорирует его. Он даже не пытается использовать op_GreaterThan, вместо этого он ищет интерфейс System.IComparable.
Еще хуже, это проверка во время выполнения. Несмотря на то, что он может статически определить, что класс Foo не реализует IComparable, он все равно работает и компилирует код в любом случае.