🔬 کالبدشکافی آبجکتها با Deconstructors در #C
تو پست قبلی دیدیم چطور با Object Initializers یه آبجکت رو به صورت شیک "بسازیم". حالا بیاید ببینیم چطور میتونیم یه آبجکت رو به همون زیبایی "بشکافیم" و اجزاش رو استخراج کنیم!
سیشارپ یه قابلیت مدرن و قدرتمند به اسم Deconstructor داره که دقیقاً برعکس سازنده (Constructor) عمل میکنه.
1️⃣ حالا Deconstructor چیست؟
این Deconstructor یه متد خاص به اسم Deconstruct هست که شما تو کلاستون تعریف میکنید. این متد، فیلدها و پراپرتیهای کلاس شما رو به مجموعهای از متغیرهای خروجی (out parameters) تبدیل میکنه.
public class Rectangle
{
public readonly float Width, Height;
public Rectangle(float width, float height)
{
Width = width;
Height = height;
}
// این متد Deconstructor ماست
public void Deconstruct(out float width, out float height)
{
width = Width;
height = Height;
}
}
2️⃣ جادوی سینتکس: کالبدشکافی در یک خط! ✨
حالا که متد Deconstruct رو داریم، #C به ما یه سینتکس فوقالعاده شیک و خوانا برای استفاده ازش میده:
var rect = new Rectangle(3, 4);
// جادو اینجا اتفاق میفته!
// این خط، متد Deconstruct رو صدا میزنه
(float width, float height) = rect;
Console.WriteLine($"Width: {width}, Height: {height}"); // خروجی: Width: 3, Height: 4
این سینتکس، کد شما رو به شدت تمیز و بیانگر میکنه.
3️⃣ ترفندهای خلاصهنویسی
این قابلیت چند تا ترفند برای خلاصهتر شدن هم داره:
استفاده از var:
// کامپایلر خودش نوعها رو تشخیص میده
var (width, height) = rect;
نادیده گرفتن با _ (Discard):
اگه فقط به یکی از مقادیر نیاز دارید، میتونید اون یکی رو با _ نادیده بگیرید:
// ما اینجا فقط به ارتفاع نیاز داریم
var (_, height) = rect;
تخصیص به متغیرهای موجود:
اگه متغیرها رو از قبل دارید، دیگه نیازی به تعریفشون نیست:
float w, h;
(w, h) = rect;
🤔 حرف حساب و تجربه شما
شما تا حالا از Deconstructors تو کدهاتون استفاده کردید؟ به نظرتون بهترین کاربرد این قابلیت کجاست؟
🔖 هشتگها:
#CSharp #Programming #Developer #DotNet #ModernCSharp #CleanCode #BestPractices