מילת המפתח 'base'
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 20 מתוך 70.
כשמחלקה נגזרת יורשת ממחלקת בסיס, לעיתים קרובות צריך לגשת ישירות לחברים של מחלקת האב. מילת המפתח base מספקת את החיבור הזה ומאפשרת לקרוא לבנאי של מחלקת הבסיס או לגשת למתודות ולמאפיינים שלה.
השימוש הנפוץ ביותר ב-base הוא קריאה לבנאי של מחלקת האב. כשאתה יוצר אובייקט נגזר, באפשרותך להעביר ערכים למחלקת הבסיס:
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
}
public class Dog : Animal
{
public string Breed { get; set; }
public Dog(string name, string breed) : base(name)
{
Breed = breed;
}
}התחביר : base(name) קורא לבנאי של Animal לפני שגוף הבנאי של Dog מופעל. כך מוודאים שמחלקת הבסיס מאותחלת כראוי תחילה.
אפשר גם להשתמש ב־base כדי לקרוא למתודות של מחלקת האב מתוך המחלקה הנגזרת:
public class Animal
{
public void Speak()
{
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal
{
public void Speak()
{
base.Speak(); // קורא ל-Speak של Animal
Console.WriteLine("Woof!");
}
}כאן, base.Speak() קוראת במפורש לגרסה של המתודה במחלקת האב. זה שימושי כשאתה רוצה להרחיב את ההתנהגות של מחלקת האב במקום להחליף אותה לחלוטין.
אתגר
קלבואו נבנה מערכת לניהול מלאי מוצרים שמדגימה כיצד מחלקות נגזרות משתמשות במילת המפתח base כדי לאתחל כראוי את מחלקת האב שלהן ולהרחיב התנהגות שעברה בירושה.
תיצרו שלושה קבצים כדי לארגן את הקוד שלכם:
Product.cs: הגדירו מחלקה בשםProductבמרחב השמותInventory. מחלקת בסיס זו מייצגת כל מוצר שיש לו מאפייןName(מחרוזת) ומאפייןPrice(מספר עשרוני). כללו בנאי שמקבל את שני הערכים ומתודהGetInfo()שמחזירה"{Name}: ${Price}".ElectronicProduct.cs: הגדירו מחלקה בשםElectronicProductבמרחב השמותInventory, שיורשת מ-Product. המחלקה הזו מוסיפה מאפייןWarrantyMonths(מספר שלם). הבנאי צריך לקבל שם, מחיר וחודשי אחריות — השתמשו ב-baseכדי להעביר את השם והמחיר לבנאי של מחלקת האב. צרו מתודה בשםGetInfo()שקוראת תחילה למתודהGetInfo()של מחלקת האב באמצעותbase, ואז מוסיפה" (Warranty: {WarrantyMonths} months)"כדי להרחיב את הפלט.Program.cs: בקובץ הראשי שלכם, צרו מופע שלElectronicProductבאמצעות ערכי הקלט והציגו את המידע המלא שלו באמצעות קריאה ל-GetInfo().
תקבלו שלושה ערכי קלט:
- שם המוצר
- מחיר
- חודשי אחריות
הדפיסו את התוצאה של קריאה ל-GetInfo() על המוצר האלקטרוני שלכם.
לדוגמה, אם ערכי הקלט הם Laptop, 999.99 ו-24, הפלט צריך להיות:
Laptop: $999.99 (Warranty: 24 months)שימו לב כיצד המחלקה הנגזרת מתבססת על הפלט של מחלקת הבסיס במקום לשכפל את הלוגיקה. מילת המפתח base מאפשרת לכם לעשות שימוש חוזר בהתנהגות של מחלקת האב ולהרחיב אותה בצורה חלקה!
נסו בעצמכם
using System;
using Inventory;
class Program
{
public static void Main(string[] args)
{
// קרא את נתוני הקלט
string name = Console.ReadLine();
decimal price = Convert.ToDecimal(Console.ReadLine());
int warrantyMonths = Convert.ToInt32(Console.ReadLine());
// TODO: צור ElectronicProduct עם ערכי הקלט
// TODO: הדפס את התוצאה של הקריאה ל-GetInfo() על המוצר האלקטרוני שלך
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין