Конкретные строки в .NET в конечном итоге разрешают вызовы одной из перегрузок статических String.Concat .Это оптимизация для уменьшения количества временных строк, которые в противном случае могли бы быть созданы, когда множественные конкатенации происходят в одном операторе.
Короче говоря, это работает потому, что ряд перегрузок String.Concat примет object
в списке аргументов, а поскольку int, float и т. Д. По сути являются объектами, они могут быть переданы в Concat.перегрузка, которая принимает один или несколько object
параметров.Внутренне Concat в основном делает .ToString()
на поступающем объекте, поэтому превращает ваш int
в строковое представление.
В вашем конкретном примере
string st = "" + 12;
Компилятор восстановит, что первыйстрока пуста и просто вызывает перегрузку String.Concat(object)
.Который преобразует целое число 12 в строку и присваивает его st
.
Эта перегрузка вызывается, потому что целое число может быть неявно упаковано в ячейку, чтобы соответствовать типу объекта и, следовательно, удовлетворять выбору перегрузки метода.