Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إعادة تعريف ()ToString

جزء من قسم Object Oriented Programming في رحلة 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);  // أليس (30 عاماً)

بدون الـ override، سيقوم هذا بطباعة شيء مثل MyNamespace.Person. الكلمة المفتاحية override مطلوبة لأنك تقوم باستبدال الطريقة الموروثة من object. هذا ذو قيمة خاصة لتصحيح الأخطاء والتسجيل، حيث تحتاج إلى نظرة سريعة على حالة الكائن.

challenge icon

التحدي

سهل

لنقم ببناء فئة Book توفر تمثيلات نصية ذات معنى عند طباعتها، مما يجعل تصحيح الأخطاء وعرض معلومات الكتاب أكثر سهولة.

ستقوم بتنظيم الكود الخاص بك عبر ملفين:

  • Book.cs: أنشئ فئة Book داخل مساحة الأسماء Library لتمثيل كتاب بتفاصيله الأساسية. يجب أن يحتوي كتابك على:
    • ثلاث خصائص للقراءة فقط: Title (string)، و Author (string)، و Year (int)
    • مشد (constructor) يقبل العنوان، والمؤلف، والسنة بهذا الترتيب
    • تجاوز (override) للدالة ToString() التي تعيد نصاً منسقاً: "{Title}" by {Author} ({Year})
    لاحظ أن العنوان يجب أن يكون محاطاً بعلامات اقتباس مزدوجة في المخرجات!
  • Program.cs: في ملفك الرئيسي، أنشئ كائن Book باستخدام قيم الإدخال وقم بطباعته مباشرة. بفضل تجاوزك للدالة ToString()، فإن تمرير كائن الكتاب إلى Console.WriteLine() سيعرض المعلومات المنسقة تلقائياً بدلاً من اسم النوع.

ستتلقى ثلاثة مدخلات:

  • عنوان الكتاب (string)
  • اسم المؤلف (string)
  • سنة النشر (integer)

اطبع كائن الكتاب مباشرة باستخدام Console.WriteLine().

على سبيل المثال، إذا كانت المدخلات هي The Great Gatsby، و F. Scott Fitzgerald، و 1925، يجب أن تكون المخرجات:

"The Great Gatsby" by F. Scott Fitzgerald (1925)

السحر هنا هو أنك لا تستدعي ToString() بشكل صريح - فعندما تمرر كائناً إلى Console.WriteLine()، فإنه يستدعي تلقائياً دالة ToString() الخاصة بالكائن. التجاوز الذي قمت به يجعل هذه المخرجات مفيدة بدلاً من مجرد إظهار Library.Book!

ورقة مرجعية

كل فئة في 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)";
    }
}

عندما تقوم بطباعة كائن، يتم استدعاء ToString() تلقائيًا:

Person p = new Person("Alice", 30);
Console.WriteLine(p);  // Alice (30 years old)

الكلمة المفتاحية override مطلوبة عند استبدال دالة موروثة من object.

جرّب بنفسك

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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming