Что происходит в этом примере Boxing на C#?

У Джона Скита есть интересный пост под названием: «Почему бокс не даёт мне спать по ночам", где он оценивает производительность различных способов вывода целочисленного значения.

Я почти уверен, что приведенный ниже код ЯВЛЯЕТСЯ боксом, но почему Джон считает, что он НЕ является боксом? его пример в конце.

int i = 5;
object o = i;
Console.WriteLine("Number is: {0}", o);

Пример со страницы Джона:

#if CONSOLE_WITH_BOXING
            Console.WriteLine("{0} {1} {2}", i, i, i);            
#elif CONSOLE_NO_BOXING
            object o = i;
            Console.WriteLine("{0} {1} {2}", o, o, o);
#elif CONSOLE_STRINGS
            string s = i.ToString();
            Console.WriteLine("{0} {1} {2}", s, s, s);

P.S. "упаковка и распаковка в int и string" не отвечает на мой вопрос.

Спасибо.


person MaYaN    schedule 23.07.2014    source источник
comment
Вы только что удалили свой предыдущий вопрос и сообщили?   -  person Patrick Hofman    schedule 23.07.2014
comment
Да, так как он был помечен как ДУБЛИК, поэтому вместо редактирования я удалил его и разместил новый.   -  person MaYaN    schedule 23.07.2014
comment
возможный дубликат упаковки и распаковки в int и string   -  person Patrick Hofman    schedule 23.07.2014
comment
Не делайте репост. Просто скажите в исходном посте, почему вы считаете, что это не дубликат.   -  person Patrick Hofman    schedule 23.07.2014
comment
@Patrick SO рекомендует отредактировать или задать новый вопрос, когда вопрос помечен как дубликат, а упаковка и распаковка в int и string не отвечают на мой вопрос, как указано выше. :-)   -  person MaYaN    schedule 23.07.2014
comment
Я уверен, что это не так. Пост можно открыть повторно, если он не является дубликатом.   -  person Patrick Hofman    schedule 23.07.2014
comment
@ Патрик, я не говорил, что его нельзя повторно открыть / отредактировать, задать новый вопрос - это один из двух доступных вариантов, который я выбрал. Я думаю, что лучше сосредоточиться на вопросе/ответе, чем идти по касательной.   -  person MaYaN    schedule 23.07.2014
comment
Нет. Вы не должны делать репосты. Можете ли вы предоставить ссылку на мета, разрешен ли репост?   -  person Patrick Hofman    schedule 23.07.2014
comment
Итак, позвольте мне сказать прямо: вы удалили вопрос в знак протеста против того, что он был помечен как дубликат, а затем продолжили его репост? Разве это не делает ваш повторно размещенный вопрос дубликатом самого себя? Расскажите о самосбывающемся пророчестве.   -  person BoltClock    schedule 23.07.2014
comment
Не вдаваясь в слишком мета здесь, он говорит новый вопрос, а не тот же вопрос снова   -  person Klors    schedule 23.07.2014
comment
@Klors, это не тот же вопрос, это новый вопрос, на который теперь есть ответ! :-)   -  person MaYaN    schedule 23.07.2014
comment
@MaYaN: Это... тот же вопрос. Новая копия, но тот же вопрос. Тот факт, что теперь у него есть ответ, не имеет значения. В любом случае, пожалуйста, не делайте этого снова. Это не разрешено и только повысит ваши шансы на то, что вам вообще запретят задавать вопросы.   -  person BoltClock    schedule 23.07.2014
comment
@BoltClock, возможно, ты прав! теперь идем дальше :-)   -  person MaYaN    schedule 23.07.2014


Ответы (1)


Это бокс, разница только в том, на какой строке это происходит:

без упаковки (см. http://msdn.microsoft.com/en-us/library/a0bfz20d%28v=vs.110%29.aspx):

Console.WriteLine("{0} {1} {2}", o, o, o);

заниматься боксом:

object o = i;

или рассмотреть

три бокса:

Console.WriteLine("{0} {1} {2}", i, i, i);

один бокс:

object o = i;
Console.WriteLine("{0} {1} {2}", o, o, o);
person mikey    schedule 23.07.2014
comment
идеально! это имеет смысл. - person MaYaN; 23.07.2014