מתי להשתמש בכיתה מופשטת לעומת ממשק ב- C #

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

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

הסביר שיעור C # מופשט

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

הסבר על ממשק C #

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

האם עלי להשתמש בשיעור מופשט או בממשק?

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

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

כפי שקובע תיעוד הממשקים של מיקרוסופט:

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

יישומי ממשק מרומזים ומפורשים

ניתן ליישם ממשקים באופן מרומז או מפורש. תן לי להסביר כיצד שני היישומים הללו נבדלים. שקול ממשק שנקרא IBusinessLogic.

ממשק ציבורי IBusinessLogic

{

   בטל אתחול ();

}

המחלקה הבאה בשם BusinessLogicמיישמת את IBusinessLogicהממשק.

מעמד ציבורי BusinessLogic: IBusinessLogic

{

   חלל ציבורי אתחל ()

   {

       // קצת קוד

   }

}

אתה יכול ליצור מופע של BusinessLogicהכיתה במפורש ואז להתקשר Initialize()לשיטה כפי שמוצג להלן.

 IBusinessLogic businessLogic = BusinessLogic חדש ();

businessLogic.Initialize ();

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

מעמד ציבורי BusinessLogic: IBusinessLogic

{

   בטל IBusinessLogic.Initialize ()

   {

   }

}

כעת תוכל להפעיל את Initialize()השיטה באותו אופן באמצעות הפניה IBusinessLogicלממשק. ההבדל בשתי הגישות הוא שכאשר אתה מיישם את הממשק במפורש בכיתה שלך, אתה נאלץ להפעיל שיטה של ​​הממשק שלך תוך שימוש בהתייחסות לממשק בלבד. לכן קטע הקוד הבא לא יעבוד, כלומר לא היה קומפילציה.

 BusinessLogic businessLogic = BusinessLogic חדש ();

businessLogic.Initialize ();

כיצד לעשות יותר ב- C #:

  • מתי להשתמש בכיתה מופשטת לעומת ממשק ב- C #
  • כיצד לעבוד עם AutoMapper ב- C #
  • כיצד להשתמש בביטויי למבדה ב- C #
  • כיצד לעבוד עם נציגי Action, Func ו- Predicate ב- C #
  • כיצד לעבוד עם נציגים ב- C #
  • כיצד ליישם לוגר פשוט ב- C #
  • כיצד לעבוד עם תכונות ב- C #
  • כיצד לעבוד עם log4net ב- C #
  • כיצד ליישם את דפוס עיצוב המאגר ב- C #
  • כיצד לעבוד עם השתקפות ב- C #
  • כיצד לעבוד עם מערכת קבצים ב- C #
  • כיצד לבצע אתחול עצל ב- C #
  • כיצד לעבוד עם MSMQ ב- C #
  • כיצד לעבוד עם שיטות הרחבה ב- C #
  • איך לנו ביטויים למבדה ב- C #
  • מתי להשתמש במילת המפתח ההפכפכה ב- C #
  • כיצד להשתמש במילת המפתח תשואה ב- C #
  • כיצד ליישם פולימורפיזם ב- C #
  • כיצד לבנות מתזמן משימות משלך ב- C #
  • כיצד לעבוד עם RabbitMQ ב- C #
  • איך לעבוד עם ציצית ב C #
  • חקר שיטות וירטואליות ומופשטות ב- C #