דריסת ToString()
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 38 מתוך 70.
כל מחלקה ב-C# יורשת מ-object, שמספקת את המתודה ToString(). כברירת מחדל, היא מחזירה את שם הטיפוס המלא - לא שימושי במיוחד כשרוצים לראות את הנתונים בפועל של אובייקט.
אפשר לדרוס את ToString() כדי להחזיר ייצוג מחרוזת משמעותי של האובייקט שלך:
public class Person
{
public string Name { get; }
public int Age { get; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
public override string ToString()
{
return $"{Name} ({Age} years old)";
}
}עכשיו, כשמדפיסים או משרשרים אובייקט Person, מתקבל פלט קריא:
Person p = new Person("Alice", 30);
Console.WriteLine(p); // Alice (בת 30)ללא הדריסה, זה היה מדפיס משהו כמו MyNamespace.Person. מילת המפתח override נדרשת כי את/ה מחליפ/ה את המתודה שעוברת בירושה מ־object. זה שימושי במיוחד לניפוי שגיאות ולרישום ביומן, כשצריך לקבל במהירות תמונה על מצב האובייקט.
אתגר
קלנבנה מחלקה Book שמספקת ייצוגי מחרוזת משמעותיים בעת הדפסה, וכך הופכת את ניפוי הבאגים ואת הצגת פרטי הספר לאינטואיטיביים הרבה יותר.
תארגן את הקוד שלך בשני קבצים:
Book.cs: צור מחלקהBookבמרחב השמותLibraryשמייצגת ספר באמצעות הפרטים החיוניים שלו. לספר שלך צריכים להיות:- שלוש תכונות לקריאה בלבד:
Title(מחרוזת),Author(מחרוזת) ו-Year(מספר שלם) - בנאי שמקבל כותרת, מחבר ושנה, בסדר הזה
- מתודה
ToString()שעברה דריסה ומחזירה מחרוזת מעוצבת:"{Title}" by {Author} ({Year})
- שלוש תכונות לקריאה בלבד:
Program.cs: בקובץ הראשי שלך, צור אובייקטBookבאמצעות ערכי הקלט והדפס אותו ישירות. בזכות הדריסה שלToString(), העברת אובייקט הספר אלConsole.WriteLine()תציג באופן אוטומטי את המידע המעוצב במקום את שם הטיפוס.
תקבל שלושה קלטים:
- כותרת הספר (מחרוזת)
- שם המחבר (מחרוזת)
- שנת הפרסום (מספר שלם)
הדפס את אובייקט הספר ישירות באמצעות Console.WriteLine().
לדוגמה, אם הקלטים הם The Great Gatsby, F. Scott Fitzgerald ו-1925, הפלט צריך להיות:
"The Great Gatsby" by F. Scott Fitzgerald (1925)הקסם כאן הוא שלא קוראים ל-ToString() במפורש — כשמעבירים אובייקט אל Console.WriteLine(), הוא קורא באופן אוטומטי למתודת ToString() של האובייקט. הדריסה שלך הופכת את הפלט הזה לשימושי במקום להציג רק את Library.Book!
נסו בעצמכם
using System;
using Library;
class Program
{
public static void Main(string[] args)
{
// קרא את הקלט
string title = Console.ReadLine();
string author = Console.ReadLine();
int year = Convert.ToInt32(Console.ReadLine());
// TODO: צור אובייקט Book באמצעות ערכי הקלט
// TODO: הדפס את אובייקט Book ישירות באמצעות Console.WriteLine()
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין