Boxing and UnBoxing in .Net Applications
Submitted by Issam Ali on Thu, 09/20/2007 - 08:40سأحاول في هذا المقال توضيح مفهوم الـ Boxing و الـ UnBoxing في برامج الـ .NET والذي كان قد تطرق إليه محمد نسمان في أحد مقالاته الـ Boxingهو عندما نقوم بالتحويل من الـ Value Type إلى Reference Type لا أدري إن كان يصح ترجمتها (التحويل من قيمة إلى مرجعية)، أما الـ UnBoxing فهي عندما نقوم بالتحويل من Reference Type إلى Value Type . وطبعاً هذا أمر متاح في بيئة الـ .NET بشكل مباشر وعن طريق الاسناد للتوضيح أكثر في بيئة الـ .NET هناك مجموعتين من (الأنواع) Types الأولى Value Type (نوع قيمة) والثانية Reference Type (نوع مرجعية). Value Type : هي تابعة للصف System.ValueType وهي (numeric, Boolean, Char, enumerations, structures "Records") وهي تحجز ضمن المكدس Stack و هذا مشابه لبيئة الـ Win32. Reference Type : هي تابعة للصف System.Object وهي عبارة عن مؤشر Pointer إلى بيانات في الكومة Heap وهي تدار أو تحذف في النهاية من قبل مجمع النفايات framework's garbage collector تماماً مثل Java و هي هنا تتميز عن بيئة الـ Win32 التي تحتاج لتدخل المبرمج لحذف ما كان قد أنشأه من أغراض عند الانتهاء منها. و الـ Reference Type في بيئة الـ .NET هي (string, arrays, classes, delegates) الـ Boxing و الـ UnBoxing تحدث بشكل تلقائي في برامج الـ C# أما في برامج Delphi .Net فهناك Directive جديد هو $AUTOBOX وهو يكون Off بشكل افتراضي لذلك يجب أن نستخدمه بشكل On الآن لننتقل إلى مثال قد يوضح المسألة لنبدأ مشروع .Net من النوع Console ولنكتب الكود التالي :