Menu
Coddy logo textTech

מחלקת הבסיס 'object'

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 23 מתוך 70.

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

המחלקה object מספקת כמה מתודות וירטואליות שאפשר לדרוס במחלקות שלך:

public class Person
{
    public string Name { get; set; }
    
    // דריסה של המתודה מ-object
    public override string ToString()
    {
        return $"Person: {Name}";
    }
    
    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name;
        return false;
    }
    
    public override int GetHashCode()
    {
        return Name?.GetHashCode() ?? 0;
    }
}

שלוש המתודות הנפוצות ביותר לדריסה הן ToString() לייצוג כמחרוזת, Equals() להשוואת אובייקטים, ו־GetHashCode() לאוספים מבוססי גיבוב. כברירת מחדל, ToString() מחזירה את שם הטיפוס, ו־Equals() בודקת שוויון לפי הפניה.

מכיוון שהכול יורש מ־object, אפשר לאחסן כל סוג במשתנה מסוג object:

object item1 = new Person { Name = "Alice" };
object item2 = 42;
object item3 = "Hello";

Console.WriteLine(item1.ToString());  // Person: Alice

מחלקת הבסיס האוניברסלית הזו היא שמאפשרת תכונות כמו אוספים שמכילים טיפוסים מעורבים, וזו הסיבה שלכל אובייקט ב-C# יש גישה למתודות כמו ToString() ו-GetType().

challenge icon

אתגר

קל

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

תיצרו שני קבצים כדי לארגן את הקוד שלכם:

  • Book.cs: הגדירו מחלקה בשם Book במרחב השמות Library. לספר שלכם יהיו מאפיינים Title (מחרוזת) ו-Author (מחרוזת), וכן בנאי שמגדיר את שני הערכים. דרסו את שלוש המתודות המרכזיות שעוברות בירושה מ-object:
    • ToString() צריכה להחזיר את "{Title} by {Author}"
    • Equals(object obj) צריכה להחזיר true אם האובייקט השני הוא Book עם אותם Title ו-Author
    • GetHashCode() צריכה לשלב את קודי הגיבוב של שני המאפיינים
  • Program.cs: בקובץ הראשי, צרו שני ספרים באמצעות ערכי הקלט. הציגו כל ספר באמצעות ToString(), ואז בדקו אם הם שווים והדפיסו את התוצאה. לבסוף, הדגימו שאפשר לאחסן Book במשתנה מסוג object ועדיין לקבל פלט משמעותי כשקוראים ל-ToString().

תקבלו ארבעה קלטים:

  • שם הספר הראשון
  • מחבר הספר הראשון
  • שם הספר השני
  • מחבר הספר השני

הדפיסו את הפלט בפורמט הזה:

Book 1: {ToString result}
Book 2: {ToString result}
Are they equal? {True/False}
Stored as object: {ToString result of first book stored in object variable}

לדוגמה, אם הקלטים הם 1984, George Orwell, 1984 ו-George Orwell, הפלט צריך להיות:

Book 1: 1984 by George Orwell
Book 2: 1984 by George Orwell
Are they equal? True
Stored as object: 1984 by George Orwell

אם הקלטים הם 1984, George Orwell, Brave New World ו-Aldous Huxley, הפלט צריך להיות:

Book 1: 1984 by George Orwell
Book 2: Brave New World by Aldous Huxley
Are they equal? False
Stored as object: 1984 by George Orwell

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

נסו בעצמכם

using System;
using Library;

class Program
{
    public static void Main(string[] args)
    {
        // קרא קלט עבור שני ספרים
        string title1 = Console.ReadLine();
        string author1 = Console.ReadLine();
        string title2 = Console.ReadLine();
        string author2 = Console.ReadLine();

        // TODO: צור שני אובייקטים מסוג Book באמצעות ערכי הקלט

        // TODO: הדפס את ספר 1 באמצעות ToString()
        // פורמט: "Book 1: {ToString result}"

        // TODO: הדפס את ספר 2 באמצעות ToString()
        // פורמט: "Book 2: {ToString result}"

        // TODO: בדוק אם הספרים שווים והדפס את התוצאה
        // פורמט: "Are they equal? {True/False}"

        // TODO: אחסן את הספר הראשון במשתנה מסוג object והדפס אותו
        // פורמט: "Stored as object: {ToString result}"
    }
}
quiz iconבחנו את עצמכם

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

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

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