Когда тип значения помещается в коробку, он помещается внутри ссылочного объекта нетипизированного. Итак, что здесь вызывает недопустимое исключение?Как CLR знает тип предмета в штучной упаковке?
long l = 1;
object obj = (object)l;
double d = (double)obj;
межжала, спасибо Джон. Эффективный C# Вагнера гласит: «Бокс помещает тип значения в нетипизированный ссылочный объект». Я уверен, что это также говорит о том, что объекты в коробке не содержат метаданных типа, хотя я не могу найти эту конкретную цитату прямо сейчас. Это было когда я читал эту книгу, что вопрос возник ко мне. – fearofawhackplanet
@fearofawhackplanet: Я бы не хотел вставлять слова в рот Билла о том, что он имел в виду, - но объект коробки, который определенно * *, знает свой первоначальный тип, включая перечисления. (Вставьте значение перечисления, а затем используйте ToString напрямую без распаковки для доказательства этого). –
Я считаю, что это хорошая демонстрация. 'long l = 40L; объект o = (объект) l; Console.WriteLine (o.GetType()); 'В этом случае System.Int64 печатается на экране. Даже если 'o' является объектом, базовый тип все еще длинный. –