موصى به, 2021

اختيار المحرر

الفرق بين Boxing و Unboxing في C #

في C # ، يتم اشتقاق كل أنواع القيم من كائن الفئة. لذلك ، يمكن أن يشير المتغير المرجعي لكائن الكتابة إلى أي نوع قيمة آخر. تقدم C # طريقتين إلى Boxing و Unboxing ، والتي تربط نوع القيمة بالنوع المرجعي. الاختلاف الأساسي بين Boxing و Unboxing هو أن Boxing هو تحويل نوع القيمة إلى نوع كائن بينما ، على أيدي الآخرين ، يشير المصطلح Unboxing إلى تحويل نوع الكائن إلى نوع القيمة. دعونا ندرس الاختلافات الأخرى بين Boxing و Unboxing.

رسم بياني للمقارنة

أساس للمقارنةملاكمةالإخراج من العلبة
الأساسيةنوع الكائن يشير إلى نوع القيمة.عملية استرجاع قيمة من كائن محاصر.
تخزينيتم نسخ القيمة المخزنة على المكدس إلى الكائن المخزن في ذاكرة كومة الذاكرة المؤقتة.يتم نسخ قيمة الكائن المخزنة على ذاكرة الكومة إلى نوع القيمة المخزنة على المكدس.
تحويلاتتحويل ضمني.تحويل صريح.
مثالint n = 24؛
الكائن ob = n؛
int m = (int) ob؛

تعريف الملاكمة

Boxing هو إجراء لتحويل نوع القيمة إلى نوع كائن. هنا ، يتم تخزين نوع القيمة في بنية تخزين العناصر ، ويتم تخزين نوع الكائن في ذاكرة الكومة. هذا التحويل من نوع القيمة لنوع الكائن هو تحويل ضمني. يمكنك تعيين قيمة إلى كائن مباشرةً ، وسيتولى C # معالجة عملية تحويل الباقي. دعونا نفهم الملاكمة مع مثال.

 int i = 24؛ object ob = i؛ / / اكتب العدد الصحيح n في نوع الكائن ob. أو كائن ob1 = 21 ؛ // هنا أيضا نوع الكائن ob1 يشير إلى نوع صحيح 

في التعليمات البرمجية أعلاه ، يتم تخزين نوع العدد الصحيح i المحتوي على القيمة 24 على المكدس ويتم نسخه إلى كائن نوع ob. يشير نوع الكائن الآن إلى قيمة عدد صحيح. الآن ، تحتوي "int i" أيضًا على قيمة 24 و "object type ob" تحتوي أيضًا على القيمة 24 ، ولكن كلتا القيمتين مستقلتين عن بعضهما البعض ، أي إذا غيّرت قيمة i ، فلن يعكس التغيير في قيمة ob.

يستهلك الملاكمة ذاكرة إضافية بالإضافة إلى وقت إضافي. السبب هو أن كائن جديد ، والتي ستشير إلى نوع القيمة ، يجب تخصيص مساحة الذاكرة على كومة الذاكرة المؤقتة. بعد ذلك ، سيتم نقل قيمة نوع القيمة المخزنة على المكدس إلى ob نوع الكائن ، في موقع ذاكرة الكومة.

تعريف Unboxing

عكس Boxing هو Unboxing. يعد إلغاء الإرسال هو تحويل نوع الكائن إلى نوع القيمة. في Unboxing يتم نقل قيمة نوع كائن محاصر المخزنة على كومة الذاكرة المؤقتة إلى نوع القيمة المخزنة في بنية تخزين العناصر. على عكس الملاكمة ، يجب أن يتم عمل Unboxing بشكل صريح. يتم إرسال نوع الكائن بشكل واضح إلى نوع القيمة ، ويجب أن يكون نوع القيمة هو نفس القيمة التي يشير إليها نوع الكائن. دعونا نفهم مفهوم Unboxing مع مثال.

 int i = 24؛ object ob = i؛ / / اكتب العدد الصحيح n في نوع الكائن ob. int j = (int) ob؛ // Unbox the integer value hidden in object type ob to integer type y. 

يتم استرداد القيمة المخزنة في الكائن ob عن طريق صبها على النوع نفسه حيث أن الكائن يشير إلى أي نوع صحيح "j".

يستهلك Unboxing المزيد من الذاكرة والمزيد من الوقت. منذ ذلك الحين ، عندما يكون نوع الكائن غير محمي ، يجب أن يتم نقل قيمة نوع الكائن المخزن على الكومة إلى نوع القيمة الجديد المخزن في المكدس. نوع الكائن الذي تكون القيمة التي تم استردادها ستكون متاحة الآن لمجموعة البيانات المهملة.

الاختلافات الرئيسية بين الملاكمة و Unboxing

  1. في الملاكمة ، يتم عمل كائن للإشارة كنوع القيمة. من ناحية أخرى ، تسمى عملية استرداد القيمة مرة أخرى من الكائن المحاصر unboxing.
  2. يتم نسخ نوع القيمة المخزنة على كدسة إلى الكائن المخزن في ذاكرة كومة الذاكرة المؤقتة. على الجانب الآخر ، في unboxing ، يتم نسخ كائن مخزن في ذاكرة كومة الذاكرة المؤقتة إلى نوع القيمة المخزنة في ذاكرة مكدس.
  3. Boxing هو تحويل ضمني بينما ، unboxing هو تحويل واضح.

استنتاج:

ويستهلك كل من الملاكمة وفقدان الذاكرة وقتاً أطول وذاكرة ، وهي مكلفة حسابياً. كما أنهم يفتقرون إلى سلامة النوع ويزيد من الحمل في وقت التشغيل. يُنصح دائمًا بتجنب الاستخدام المفرط للملاكمة وفقدان الصندوق في البرنامج.

Top