Menu
Coddy logo textTech

דריסת 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. זה שימושי במיוחד לניפוי שגיאות ולרישום ביומן, כשצריך לקבל במהירות תמונה על מצב האובייקט.

challenge icon

אתגר

קל

נבנה מחלקה 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()
    }
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C# אונליין