الفرق بين الملاكمة و Unboxing في C #
المحتوى
في C # ، يتم اشتقاق جميع أنواع القيم من كائن الفئة. لذلك ، يمكن أن يشير المتغير المرجعي للكائن type إلى أي نوع قيمة آخر. يقدم C # طريقتين للملاكمة و Unboxing ، والتي تربط نوع القيمة بنوع المرجع. يتمثل الاختلاف الأساسي بين Boxing و Unboxing في أن Boxing هي تحويل نوع القيمة إلى نوع كائن ، بينما يشير مصطلح Unboxing ، من ناحية أخرى ، إلى تحويل نوع الكائن إلى نوع القيمة. دعونا دراسة الاختلافات الأخرى بين الملاكمة و Unboxing.
- رسم بياني للمقارنة
- تعريف
- الاختلافات الرئيسية
- خاتمة
رسم بياني للمقارنة
أساس للمقارنة | ملاكمة | الإخراج من العلبة |
---|---|---|
الأساسي | يشير نوع الكائن إلى نوع القيمة. | عملية استرداد القيمة من الكائن المحاصر. |
تخزين | يتم نسخ القيمة المخزنة على المكدس إلى الكائن المخزن على ذاكرة كومة الذاكرة المؤقتة. | يتم نسخ قيمة الكائنات المخزنة على ذاكرة الكومة إلى نوع القيمة المخزنة على المكدس. |
تحويلات | تحويل ضمني. | تحويل صريح. |
مثال | int n = 24 ؛ كائن ob = n ؛ | int m = (int) ob ؛ |
تعريف الملاكمة
الملاكمة هي إجراء لتحويل نوع القيمة إلى نوع كائن. هنا ، يتم تخزين نوع القيمة على المكدس ، ويتم تخزين نوع الكائن في ذاكرة الكومة. هذا التحويل لنوع القيمة إلى نوع الكائن هو تحويل ضمني. يمكنك تعيين قيمة لكائن مباشرةً ، وسوف يتعامل C # مع التحويل الباقي. دعونا نفهم الملاكمة مع مثال.
كثافة العمليات = 24 ؛ كائن ob = i ؛ / / اكتب عدد الأعداد الصحيحة n في نوع الكائن ob. أو كائن ob1 = 21 ؛ // هنا أيضًا يشير نوع الكائن ob1 إلى نوع صحيح
في التعليمة البرمجية أعلاه ، يتم تخزين نوع عدد صحيح i الذي يحتوي على القيمة 24 على المكدس ويتم نسخه إلى نوع الكائن ob. يشير نوع الكائن الآن إلى قيمة عدد صحيح. الآن ، تحتوي "int i" أيضًا على القيمة 24 و "نوع الكائن ob" يحتوي أيضًا على القيمة 24 ، لكن كلا القيمتين مستقلتان عن بعضهما البعض ، أي إذا قمت بتغيير قيمة i ، فلن يعكس التغيير في قيمة أوب.
الملاكمة تستهلك ذاكرة إضافية مع الوقت الإضافي. السبب هو أن كائن جديد ، والذي يشير إلى نوع القيمة ، يجب تخصيص مساحة الذاكرة على كومة الذاكرة المؤقتة. بعد ذلك ، سيتم نقل قيمة نوع القيمة التي يتم تخزينها على المكدس للحصول على نوع الكائن ، على موقع ذاكرة الكومة.
تعريف Unboxing
عكس الملاكمة هو Unboxing. Unboxing هو تحويل لنوع الكائن إلى نوع القيمة. في Unboxing ، يتم نقل قيمة نوع الكائن المحاصر المخزن على الكومة إلى نوع القيمة المخزنة على المكدس. على عكس Boxing ، فإن Unboxing يجب أن يتم بشكل صريح. يتم تحديد نوع الكائن بشكل صريح لنوع القيمة ، ويجب أن يكون نوع القيمة هو نفسه القيمة التي يشير إليها نوع الكائن. دعنا نفهم مفهوم Unboxing مع مثال.
كثافة العمليات = 24 ؛ كائن ob = i ؛ / / اكتب عدد الأعداد الصحيحة n في نوع الكائن ob. int j = (int) ob ؛ / / قم بإلغاء تحديد قيمة عدد صحيح المخزنة في نوع الكائن ob إلى عدد صحيح y.
يتم استرداد القيمة المخزّنة في كائن ob بإلقائها على النوع نفسه الذي كان يشير إليه الكائن ، على سبيل المثال ، نوع صحيح "j".
يستهلك Unboxing أيضًا المزيد من الذاكرة والمزيد من الوقت. منذ ذلك الحين ، عندما يتعين إلغاء تحديد نوع الكائن ، يجب نقل قيمة نوع الكائن المخزن على الكومة إلى نوع القيمة الجديد المخزن على المكدس. سيكون نوع الكائن الذي تم استرداده متاحًا الآن لجمع البيانات المهملة.
- في الملاكمة ، يتم إنشاء كائن للإشارة كنوع قيمة. من ناحية أخرى ، تسمى عملية استرداد القيمة مرة أخرى من الكائن المحاصر "unboxing".
- يتم نسخ نوع القيمة المخزنة على مكدس إلى الكائن المخزن على ذاكرة كومة الذاكرة المؤقتة. من ناحية أخرى ، في unboxing ، يتم نسخ كائن مخزّن على ذاكرة كومة الذاكرة المؤقتة إلى نوع قيمة مخزنة على ذاكرة مكدس.
- الملاكمة عبارة عن تحويل ضمني ، بينما يعتبر unboxing تحويلًا صريحًا.
خاتمة:
كل من الملاكمة و unboxing تستهلك المزيد من الوقت والذاكرة ، وأنها مكلفة حسابيا. كما أنها تفتقر إلى سلامة النوع وتزيد من وقت التشغيل. يُنصح دائمًا بتجنب استخدام الكثير من الملاكمة وإلغاء الملاكمة في البرنامج.