none
איך למנוע הפחתה או הוספה של משתנה מעבר לטווח שלו? RRS feed

  • שאלה

  • שלום,

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

                byte test = 2;
                test -= 8;
                Console.WriteLine(test); // = 250
    כיצד ניתן למנוע דבר כזה?

    יום רביעי 24 יוני 2015 06:44

תשובות

  • בין בVB ובין בC# התנהגות זו מבוטלת או מאפשרת ע"י הבורר checked.

    בVB בברירת מחדל זה מופעל, מה שמעיף שגיאה, ובC# בברירת מחדל זה מושבת מה שמאפשר את ההתנהגות. אפשר לשנות זאת במאפייני הפרויקט בלשונית Build שם ללחוץ על  Advanced... ושם לבחור בוי את Check For Arithmetic Overflow and Underflow.

    כמו כן אם אתה רוצה את ההתנהגות הזו במקום ספציפי ולא כאופציה גלובלית אז תעטוף את הקוד עם הבלוק checked.


    • נערך על-ידי לומדים יום רביעי 24 יוני 2015 10:12
    • סומן כתשובה על-ידי 12אפרים יום רביעי 24 יוני 2015 10:51
    יום רביעי 24 יוני 2015 10:11

כל התגובות

  • זו התנהגות מובנית במחלקה שבה אתה עושה שימוש

    אתה יכול לפתח מחלקות שלך שמתנהגות אחרת

    לעיתים אםשר גם להעזר ב OVERRIDE על מנת לשנות התנהגויות של מחלקות מובנות אבל לא כל המחלקות פתוחות לשינוי... תגיע לזה בהמשך הלימוד :-)

    אני מאוד ממלית לך לא לקפוץ מנושא לנושא אלא ללמוד ממדריך מסודר מהתחלה עד הסיום בלי לדלג.


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    יום רביעי 24 יוני 2015 07:07
    מנחה דיון
  • תודה על התגובה, אבל לדבריך c# היא משהו מדהים..

    ברצינות...

    אני צריך לפתח לבד טיפוסים בסיסיים, או משהו כזה..

    לא אמור להיות מנגנון שמונע שגיאות מסוג זה?

    אם נט משגעת אותי על כל המרה מרומזת לעשות קסטינג, היא לא דואגת למנוע שגיאה כל כך פשוטה של השמה מחוץ לטווח?

    בדקתי עכשיו ב VBA שזו השפה היחידה שהכרתי עד עתה, והיא לא מאפשרת להשמה כזו לקרות.

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


    • נערך על-ידי 12אפרים יום רביעי 24 יוני 2015 07:24
    יום רביעי 24 יוני 2015 07:21
  • בין בVB ובין בC# התנהגות זו מבוטלת או מאפשרת ע"י הבורר checked.

    בVB בברירת מחדל זה מופעל, מה שמעיף שגיאה, ובC# בברירת מחדל זה מושבת מה שמאפשר את ההתנהגות. אפשר לשנות זאת במאפייני הפרויקט בלשונית Build שם ללחוץ על  Advanced... ושם לבחור בוי את Check For Arithmetic Overflow and Underflow.

    כמו כן אם אתה רוצה את ההתנהגות הזו במקום ספציפי ולא כאופציה גלובלית אז תעטוף את הקוד עם הבלוק checked.


    • נערך על-ידי לומדים יום רביעי 24 יוני 2015 10:12
    • סומן כתשובה על-ידי 12אפרים יום רביעי 24 יוני 2015 10:51
    יום רביעי 24 יוני 2015 10:11
  • תודה רבה רבה.

    התפלאתי מאד שאין אפשרות כזו, אבל מתברר שהיא מתחבאת עמוק עמוק בתפריטים :-)

    אתמול התבזבז לי המון זמן על לולאה אינסופית, זו הייתה טעות שלי, אבל לא זיהיתי אותה בשל ההתנהגות הזו שלא הייתה מוכרת לי.

    ושוב תודה.

    יום רביעי 24 יוני 2015 10:53
  • אני שמח לראו שקיבלת את התשובה אפרים :-)

    לגבי לימוד מסודר, זו היתה הערה מהצד בסיום התגובה' מפני שרוב האנשים שמגיעים לפורום לא לומדים מסודר ומנסים לקפוץ בין תשובות לשאלות שעולות :-) זו שאלה שלא נתקלים בה בשום מדריך מאורגן לשלבי ההתחלה לידיעתי ולהערכתי אבל כמובן אני לא מכיר את כל המדריכים ובעיקר לא החדשים בשוק :-) 

    תודה לומדים על התשובה


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]




    יום רביעי 24 יוני 2015 12:31
    מנחה דיון