Boxing و Unboxing

Boxing فرایندی است که طی آن یک نوع مقداری مانند ساختار (Struct) به یک نوع مرجع مانند یک شیء (Object) تبدیل می‌شود. Unboxing برعکس، عمل تبدیل یک نوع مرجع به یک نوع مقداری می‌باشد. کد زیر فرایند boxing را نشان می‌دهد.

   1: struct MyStruct
   2: {
   3:     public int Number { get; set; }
   4: }
   5: 
   6: class Program
   7: {
   8:     public static void Main()
   9:     {
  10:         MyStruct valueType = new MyStruct();
  11:         valueType.Number = 10;
  12:         object refType = valueType;
  13:     }
  14: }

در کد بالا یک ساختار به نام MyStruct ایجاد کرده‌ایم و یک خاصیت (property) برای تست اهداف برای آن در نظر گرفته‌ایم. در فرایند boxing نوع مقداری به سادگی با یک متغیر از نوع آبجکت برابر قرار داده می‌شود. در کد بالا refType شامل آدرس یک نوع MyStruct است نه آدرس اصلی متغیر valueType. در زیر نحوه تبدیل refType به نوع مقداری MyStruct به وسیله unboxing نشان داده شده است.

MyStruct valueType2 = (MyStruct)refType;

همانطور که مشاهده می‌کنید با استفاده از تبدیل صریح متغیر نوع مرجع refType را به متغیر نوع مقدار MyStruct تبدیل کرده‌ایم.