Выражение
"ham " + 4
Вызывает неявное преобразование 4 в строку на основе комбинации типа строки и оператора сложения. В частности, это качество оператора «+», и при выполнении перегрузки оператора вы можете вручную реализовать такой же тип вещи.
Аналогичный и менее очевидный пример:
long myNumber = Int64.MaxValue - 1;
В этом случае «1» следует оценивать как 32-разрядное целое число, но оно неявно преобразуется. Вы можете проверить раздел 6.1 спецификации языка C # для исчерпывающего списка неявных преобразований, поддерживаемых компилятором.
edit: для ясности, раздел спецификации языка, на который я ссылался, перечисляет неявные преобразования, поддерживаемые компилятором, в то время как операторы типа «+» могут иметь свои собственные поддерживаемые преобразования.