📖 سری آموزشی کتاب C# 12 in a Nutshell
تا حالا شده یه آبجکت از کلاس خودتون رو Console.WriteLine کنید و با یه خروجی بیمعنی مثل MyProject.Panda مواجه بشید؟ 😑
راه حل این مشکل، بازنویسی (override) کردن یکی از مهمترین متدهای کلاس object یعنی ToStringهست.
ToString()
یه متد virtual در کلاس System.Object هست. وظیفهش اینه که یه نمایش متنی و خوانا از آبجکت شما برگردونه. این متد به خصوص موقع دیباگ کردن و لاگ انداختن فوقالعاده به درد میخوره، چون به شما اجازه میده وضعیت داخلی آبجکت رو به راحتی ببینید.
کافیه تو کلاس خودتون، متد ToString رو override کنید و هر رشتهای که دوست دارید و وضعیت آبجکت رو بهتر توصیف میکنه، برگردونید.
اگه
یه نکته خیلی مهم در مورد پرفورمنس: وقتی ToString رو مستقیماً روی یه Value Type (مثل int) صدا میزنید، هیچ عمل Boxing اتفاق نمیفته. Boxing (که هزینه پرفورمنس داره) فقط زمانی رخ میده که شما اول اون Value Type رو به object کست کنید.
عادت کردن به override کردن ToString در تمام کلاسهاتون، یکی از بهترین کارهاییه که میتونید برای خودتون (و همتیمیهاتون در آینده) انجام بدید.
🖨 چاپ زیبا با ()ToString: معرفی کردن آبجکتهای شما به دنیا
تا حالا شده یه آبجکت از کلاس خودتون رو Console.WriteLine کنید و با یه خروجی بیمعنی مثل MyProject.Panda مواجه بشید؟ 😑
راه حل این مشکل، بازنویسی (override) کردن یکی از مهمترین متدهای کلاس object یعنی ToStringهست.
1️⃣ ToString() چیست و چرا مهمه؟
ToString()
یه متد virtual در کلاس System.Object هست. وظیفهش اینه که یه نمایش متنی و خوانا از آبجکت شما برگردونه. این متد به خصوص موقع دیباگ کردن و لاگ انداختن فوقالعاده به درد میخوره، چون به شما اجازه میده وضعیت داخلی آبجکت رو به راحتی ببینید.
2️⃣ چطور ToString رو بازنویسی (Override) کنیم؟
کافیه تو کلاس خودتون، متد ToString رو override کنید و هر رشتهای که دوست دارید و وضعیت آبجکت رو بهتر توصیف میکنه، برگردونید.
public class Panda
{
public string Name;
// بازنویسی متد ToString
public override string ToString() => Name;
}
// --- نحوه استفاده ---
Panda p = new Panda { Name = "Petey" };
// Console.WriteLine به صورت خودکار ToString() رو روی آبجکتها صدا میزنه
Console.WriteLine(p);
// خروجی:
// Petey
اگه
ToString رو بازنویسی نکنید، خروجی پیشفرض، اسم کامل تایپ خواهد بود.3️⃣ نکته فنی: ToString و تلهی Boxing ⚠️
یه نکته خیلی مهم در مورد پرفورمنس: وقتی ToString رو مستقیماً روی یه Value Type (مثل int) صدا میزنید، هیچ عمل Boxing اتفاق نمیفته. Boxing (که هزینه پرفورمنس داره) فقط زمانی رخ میده که شما اول اون Value Type رو به object کست کنید.
int x = 1;
// ✅ بدون Boxing: بهینه و سریع
string s1 = x.ToString();
// ❌ با Boxing: هزینه پرفورمنس داره
object box = x;
string s2 = box.ToString();
🤔 حرف حساب و تجربه شما
عادت کردن به override کردن ToString در تمام کلاسهاتون، یکی از بهترین کارهاییه که میتونید برای خودتون (و همتیمیهاتون در آینده) انجام بدید.
🔖 هشتگها:
#DotNet #OOP #ToString