ההבדל בין איגרוף ללא איגרוף ב- C #

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 2 אַפּרִיל 2021
תאריך עדכון: 5 מאי 2024
Anonim
יותר מ -20 סוגים של חומרי מילוי ושמיכות לשמיכות טלאים. טבעי וסינתטי.
וִידֵאוֹ: יותר מ -20 סוגים של חומרי מילוי ושמיכות לשמיכות טלאים. טבעי וסינתטי.

תוֹכֶן


ב- C # כל סוגי הערכים נגזרים מאובייקט המחלקה. אז משתנה התייחסות של אובייקט סוג יכול להתייחס לכל סוג ערך אחר. C # מציגה שתי שיטות ל- Boxing ו- Unboxing, המקשרות בין סוג ערך לסוג הפניה. ההבדל הבסיסי בין איגרוף ללא איגרוף הוא שהאגרוף הוא המרה של סוג הערך לסוג אובייקט ואילו, מצד שני, המונח Unboxing מתייחס להמרה של סוג האובייקט לסוג הערך. בואו ונבחן את ההבדלים האחרים בין אגרוף לאיגרוף.

  1. טבלת השוואה
  2. הגדרה
  3. הבדלים עיקריים
  4. סיכום

טבלת השוואה

בסיס להשוואהאגרוףמבטל את התיבה
בסיסיסוג האובייקט מתייחס לסוג הערך.תהליך של אחזור ערך מהאובייקט הקופסא.
אחסוןהערך המאוחסן בערימה מועתק לאובייקט המאוחסן בזיכרון הערימה.ערך האובייקטים המאוחסן בזיכרון הערימה מועתק לסוג הערך המאוחסן בערימה.
המרההמרה מרומזת.המרה מפורשת.
דוגמאint n = 24;
אובייקט ob = n;
int m = (int) ob;


הגדרת אגרוף

איגרוף הוא נוהל של המרת סוג ערך לסוג אובייקט. כאן סוג הערך מאוחסן בערימה וסוג האובייקט נשמר בזיכרון הערימה. המרה זו של סוג ערך לסוג האובייקט היא המרה מרומזת. ניתן להקצות ישירות ערך לאובייקט ו- C # יטפל בהמרת השאר. בואו נבין איגרוף עם דוגמה.

int i = 24; אובייקט ob = i; // תיבה את סוג המספר השלם n לתוך אובייקט מסוג ob. או אובייקט ob1 = 21; // כאן גם סוג אובייקט ob1 מתייחס לסוג שלם

בקוד לעיל, סוג המספר השלם i המכיל ערך 24 מאוחסן בערימה ומועתק לסוג האובייקט ob. סוג אובייקט מתייחס כעת לערך שלם. כעת, "int i" מכיל גם ערך 24 ו- "סוג האובייקט ob" מכיל גם ערך 24, אך שני הערכים אינם תלויים זה בזה, כלומר אם תשנה את הערך של i, זה לא ישקף את השינוי ב- ערך אוב.

איגרוף דורש זיכרון נוסף יחד עם זמן נוסף. הסיבה היא שאובייקט חדש, שיתייחס לסוג הערך, חייב להקצות את שטח הזיכרון בערימה. בשלב הבא, הערך של סוג הערך המאוחסן בערימה יועבר לאוב סוג האובייקט, במיקום זיכרון הערימה.


הגדרת Unboxing

ההפך מאגרוף הוא Unboxing. Unboxing הוא המרה מסוג האובייקט לסוג הערך. בביטול תיבת איגרוף הערך של סוג האובייקט הקופסא המאוחסן בערימה מועבר לסוג הערך המאוחסן בערימה. בניגוד לאיגרוף, אי-האי-איגרוף צריך להיעשות במפורש. סוג האובייקט מועבר במפורש לסוג הערך, וסוג הערך חייב להיות זהה לערך עליו מתייחס סוג האובייקט. בואו נבין את המושג Unboxing באמצעות דוגמה.

int i = 24; אובייקט ob = i; // תיבה את סוג המספר השלם n לתוך אובייקט מסוג ob. int j = (int) ob; // בטל את תיבת הערך שלם השמור המאוחסן בסוג אובייקט ob לסוג מספר שלם y.

הערך המאוחסן באובייקט ob נשלף על ידי הוצאתו לסוג זהה לזה שהאובייקט התייחס ל- ie סוג שלם "j".

ביטול האחסון דורש יותר זיכרון ויותר זמן. מכיוון שכאשר יש לאבטח סוג של אובייקט, יש להעביר את ערך סוג האובייקט המאוחסן על הערימה לסוג הערך החדש המאוחסן בערימה. סוג האובייקט שערכו שאוחזר יהיה זמין כעת לאיסוף אשפה.

  1. באגרוף נוצר אובייקט שמתייחס לסוג ערך. מצד שני, תהליך אחזור הערך בחזרה מהאובייקט המתואר נקרא unboxing.
  2. סוג ערך המאוחסן בערימה מועתק לאובייקט המאוחסן בזיכרון הערימה. לעומת זאת, בביטול אי-האגרוף, אובייקט המאוחסן בזיכרון הערימה מועתק לסוג ערך המאוחסן בזיכרון הערימה.
  3. איגרוף הוא המרה מרומזת ואילו אי-איגרוף הוא המרה מפורשת.

סיכום:

גם האגרוף וגם האיגרוף דורשים יותר זמן וזיכרון, והם יקרים בחישוב. הם גם חסרי בטיחות מסוג ומגדילים את תקורה לאורך זמן. מומלץ תמיד להימנע משימוש רב מדי באגרוף ובביטול האגרוף של התוכנית.