כיצד ליישם מחלקת חריגים מותאמת אישית ב- C #

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

מחלקת הבסיס לכל החריגים ב- .Net היא Exception. כל הכיתות בהיררכיית החריגים נובעות ישירות או בעקיפין ממעמד זה. הערה כי System.ApplicationExceptionואת System.SystemExceptionכיתות להאריך את System.Exceptionהמעמד, אשר בתורו נגזר System.Objectבכיתה. שים לב שחריגים הם בדיוק כמו כל סוג אחר ב- .Net.

ApplicationException לעומת System.Exception

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

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

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

תכנון מחלקת חריגים מותאמת אישית

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

מחלקה ציבורית LoginException: System.Exception

    {

       //לעשות

    }

רישום הקוד הבא מציג את מחלקת החריגים המותאמת אישית שלנו עם יישומי ברירת המחדל והארגומנטים.

מחלקה ציבורית LoginException: System.Exception

    {

        ///

        /// בונה ברירת מחדל

        ///

        כניסה ציבורית חריג (): בסיס ()

        {

        }

        ///

        /// בונה ויכוח

        ///

        /// זהו תיאור החריג

        כניסה ציבורית חריג (הודעת מחרוזת): בסיס (הודעה)

        {

        }

        ///

        /// בונה ויכוח למעט חריג פנימי

        ///

        /// זהו תיאור החריג

        /// חריג פנימי

        כניסה ציבורית חריג (הודעת מחרוזת, חריג פנימי חריג): בסיס (הודעה, פנימי חריג)

        {

        }

        ///

        /// בונה ארגומנטים עם תמיכה בסידור

        ///

        /// מופע SerializationInfo

        /// מופע של StreamingContext

        כניסה מוגנת כניסה (מידע SerializationInfo, הקשר StreamingContext): בסיס (מידע, הקשר)

        {

        }

    }

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

שימוש בכיתת חריגים מותאמת אישית

רישום הקוד הבא מראה כיצד תוכלו להשתמש LoginExceptionבכיתה שיישמנו זה עתה.

ריק סטטי ראשי (מחרוזת [] טענות)

        {

            לְנַסוֹת

            {

                // כתוב כאן קוד להתחברות למשתמש.

                // אם האישורים שסופקו אינם תקפים

                // נזרק אובייקט חריג.

          זרוק כניסה חדשה ("פרטי כניסה לא חוקיים מסופקים ...");

            }

            לתפוס (LoginException loginException)

            {

                // כתוב כאן קוד כדי לטפל בחריג

                Console.WriteLine (loginException.Message);

            }

            Console.Read ();

        }

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