Здравствуйте, NightElve, Вы писали:
NE>Здравствуйте. NE>Не могли бы вы объяснить, что происходит при выполнении следующего кода:
Читаем C# Language Reference по operator +
Binary + operators are predefined for numeric and string types. For numeric types, + computes the sum of its two operands. When one or both operands are of type string, + concatenates the string representations of the operands.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, Saruwatari, Вы писали:
S>Здравствуйте, Denis2005, Вы писали:
D>>Результирующим выражением x + i будет объект типа string, т.к. компилятор разворачивает это в: D>>
D>>x = x.ToString() + i;
D>>
S>Не компилятор, а перегрузка оператора + типа String.
Рекомендую перед тем как ставить минусы, разобраться в вопросе.
Если внимательно посмотреть на реализацию класса System.String то ты не увидишь там перегрузок оператора + вообще.
И еще ... ознакомьтесь со спецификацией языка C#.
Здравствуйте, Denis2005, Вы писали:
D>Рекомендую перед тем как ставить минусы, разобраться в вопросе. D>Если внимательно посмотреть на реализацию класса System.String то ты не увидишь там перегрузок оператора + вообще. D>И еще ... ознакомьтесь со спецификацией языка C#.
Не спорьте, горячие финские парни. Вы неправы оба:
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, NightElve, Вы писали:
NE>>Здравствуйте. NE>>Не могли бы вы объяснить, что происходит при выполнении следующего кода:
N>Ну, это еще что! N>Вы вот на такой код посмотрите.
N>
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, NightElve, Вы писали:
NE>>Здравствуйте. NE>>Не могли бы вы объяснить, что происходит при выполнении следующего кода:
N>Ну, это еще что! N>Вы вот на такой код посмотрите.
N>
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Lloyd, Вы писали:
L>>Не спорьте, горячие финские парни. Вы неправы оба:
VD>Ну, Denis2005 почти прав. Просто он видимо изучал генериуремый код Рефлектором, а тот "помогает" преобразуя вызов Concat в оператор "+".
Дело в том, что произвести подобный фокус в отношении другого типа не удастся. Поэтому я сделал вывод о том, что оператор + для случая, если одним из операндов является строкой, реализован специальным образом, что дает право, на мой взгляд говорить о его перегрузке, пусть даже на более высоком уровне, чем реализация в классе. С другой стороны, такую перегрузку так же можно назвать особенностью компилятора.
Поправьте обязательно, если не согласны или я не прав.
Здравствуйте, Saruwatari, Вы писали:
S>Дело в том, что произвести подобный фокус в отношении другого типа не удастся. Поэтому я сделал вывод о том, что оператор + для случая, если одним из операндов является строкой, реализован специальным образом, что дает право, на мой взгляд говорить о его перегрузке, пусть даже на более высоком уровне, чем реализация в классе. С другой стороны, такую перегрузку так же можно назвать особенностью компилятора.
S>Поправьте обязательно, если не согласны или я не прав.
Скорее особенностью языка, раз такое описано в стандарте.
Здравствуйте, VladD2, Вы писали:
VD>Может быть, может быть. Но ToString() по любому будет вызвана. Не момпилятором, так реализаций string.Conсat().
К сожалению, это утверждение также неверно.
Метод ToString не будет вызван, к примеру, у аргумента равного null (это привело бы к возникновению исключения).
Вместо этого будет подставлена пустая строка.
Здравствуйте, nikov, Вы писали:
N>К сожалению, это утверждение также неверно. N>Метод ToString не будет вызван, к примеру, у аргумента равного null (это привело бы к возникновению исключения). N>Вместо этого будет подставлена пустая строка.
Мне казалось, что это и ежу понятно. А стало быть и обсуждать глупо.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.