إعادة تعريف ()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. هذا ذو قيمة خاصة لتصحيح الأخطاء والتسجيل، حيث تحتاج إلى نظرة سريعة على حالة الكائن.
التحدي
سهللنقم ببناء فئة 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()
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةNamespaces والتوجيهاتمقدمة في Classes و Objectsالكلمة المفتاحية 'this'Methods والمعاملاتFields مقابل PropertiesConstructorsObject Initializersمراجعة - آلة حاسبة بسيطة4الوراثة
صيغة الوراثة الأساسية (:)الكلمة المفتاحية 'base'الكلمات المفتاحية Virtual و Overrideالأصناف المختومة (Sealed Classes)الفئة الأساسية 'object'مراجعة - هيكلية الموظفين7ميزات متقدمة
تحميل العوامل (Operator Overloading)المفهرسات (Indexers (this[]))إعادة تعريف ()ToStringدوال التوسعة (Extension Methods)ملخص - Custom List2الخصائص والأعضاء الساكنة (Static Members)
الخصائص المطبقة تلقائيًا (Auto-Implemented Properties)خصائص القراءة فقط والكتابة فقطالحقول والدوال الساكنة (Static)الفئات الساكنة (Static Classes)الأعضاء ذات البنية التعبيرية (Expression-Bodied Members)5تعدد الأشكال والواجهات (Polymorphism & Interfaces)
تعدد الأشكال: وقت التجميع مقابل وقت التشغيلالواجهة مقابل الفئة المجردة (Abstract Class)الواجهات المتعددةالواجهات الصريحةUpcasting و Downcastingملخص - حاسبة الأشكال8مفاهيم البرمجة كائنية التوجه (OOP) المتقدمة
التركيب بدلاً من الوراثةالـ Generics (الأصناف والدوال)الـ Delegates والأحداثالـ Attributes والـ Reflectionواجهة IDisposable وجملة usingأساسيات Dependency Injection