Нет, он не упаковывается каждый раз, когда его используют.Упаковка происходит только тогда, когда вы приводите тип значения к ссылочному типу - он действительно не имеет никакого отношения к тому, где была выделена фактическая память для значения (или даже если была выделена какая-либо память).
В вашем случае именно то, как вы будете действовать в MyField, будет определять, упакован ли он, а не как Foo.
//No Boxing
var f = new Foo();
f.MyField = 5;
int val = f.MyField;
//Boxing
var f = new Foo();
f.MyFIeld = 5;
object val = f.MyField;
Обратите внимание, что во втором примере val
теперь содержитссылка на штучной упаковке Int.MyField
по-прежнему (и всегда будет оставаться) как unboxed int, и к нему можно получить доступ без распаковки (спасибо за указание на необходимые пояснения, LukeH )