תחביר ירושה בסיסית (:)
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 19 מתוך 70.
הורשה מאפשרת למחלקה לרכוש את המאפיינים והמתודות של מחלקה אחרת. במקום לכתוב מחדש את אותו קוד, יוצרים מחלקת בסיס (הורה) עם פונקציונליות משותפת, ואז יוצרים מחלקות נגזרות (ילדים) שיורשות ממנה.
ב-C#, משתמשים בסימן הנקודתיים : כדי לציין ירושה:
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} says Woof!");
}
}המחלקה Dog יורשת את כל מה שיש במחלקה Animal. יש לה גישה למאפיין Name ולמתודה Eat() בלי להצהיר עליהם שוב, והיא גם מוסיפה מתודת Bark() משלה:
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat(); // פלט: Buddy is eating.
myDog.Bark(); // פלט: Buddy says Woof!C# תומכת בירושה יחידה בלבד, כלומר מחלקה יכולה לרשת ממחלקת בסיס אחת בלבד. עם זאת, ניתן ליצור שרשראות ירושה שבהן מחלקה נגזרת הופכת למחלקת הבסיס של מחלקה אחרת. כך נוצרת היררכיה שמדגמת קשרים מהעולם האמיתי, תוך שמירה על קוד מאורגן וניתן לשימוש חוזר.
אתגר
קלבואו נבנה היררכיית כלי רכב שמדגימה כיצד ירושה מאפשרת למחלקות נגזרות להשתמש בפונקציונליות ממחלקת בסיס, ובו בזמן להוסיף התנהגויות ייחודיות משלהן.
תיצרו שלושה קבצים כדי לארגן את הקוד שלכם:
Vehicle.cs: הגדירו מחלקה בשםVehicleבמרחב השמותTransport. זו תהיה מחלקת הבסיס המשותפת לכל כלי הרכב. היא צריכה לכלול מאפייןBrand(מחרוזת) ומאפייןYear(מספר שלם), וכן מתודה בשםStartEngine()שמדפיסה"{Brand} engine started."Car.cs: הגדירו מחלקה בשםCarבמרחב השמותTransport, שיורשת מ-Vehicle. למחלקת המכונית יש מאפיין משלה,NumberOfDoors(מספר שלם), ומתודה בשםHonk()שמדפיסה"{Brand} goes Beep Beep!"Program.cs: בקובץ הראשי שלכם, צרו מופע שלCarבאמצעות ערכי קלט. הגדירו את המאפיינים שלו (כולל המאפיינים שעברו בירושה), ואז הדגימו שהמכונית יכולה להשתמש גם במתודות שלה וגם במתודות שירשה מ-Vehicle.
תקבלו שלושה ערכי קלט:
- שם המותג
- שנה
- מספר הדלתות
הדפיסו את פרטי המכונית והדגימו את היכולות שלה בפורמט הזה:
Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}לדוגמה, אם ערכי הקלט הם Toyota, 2022 ו-4, הפלט צריך להיות:
Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!שימו לב שה-Car שלכם יכולה לגשת למאפיין Brand ולמתודה StartEngine(), אף על פי שהם מוגדרים במחלקה Vehicle. זהו כוחה של הירושה — המחלקה הנגזרת מקבלת באופן אוטומטי את כל מה שקיים במחלקת הבסיס שלה!
נסו בעצמכם
using System;
using Transport;
class Program
{
public static void Main(string[] args)
{
// קראו את הקלט
string brand = Console.ReadLine();
int year = Convert.ToInt32(Console.ReadLine());
int doors = Convert.ToInt32(Console.ReadLine());
// TODO: צרו מופע של Car
// TODO: הגדירו את המאפיינים של המכונית (Brand, Year, NumberOfDoors)
// TODO: הדפיסו את פרטי המכונית בפורמט הנדרש:
// מכונית: {Brand} ({Year})
// דלתות: {NumberOfDoors}
// לאחר מכן קראו ל־StartEngine() ול־Honk()
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין