🚀 تکنیکهای حرفهای با Primary Constructors در 12 #C
تو پست قبلی با سینتکس ساده و جذاب Primary Constructors آشنا شدیم. اما قدرت واقعی این قابلیت، در تکنیکهای پیشرفتهتریه که به شما اجازه میده کدهای خیلی تمیزتر و هوشمندتری بنویسید.
امروز میخوایم با این ترفندها و البته محدودیتهاشون آشنا بشیم.
1️⃣ مقداردهی مستقیم فیلدها و پراپرتیها
شما میتونید پارامترهای سازنده اصلی رو مستقیماً برای مقداردهی اولیه فیلدها و پراپرتیهای عمومی استفاده کنید. این کار نیاز به نوشتن کد انتساب تکراری در یک سازنده سنتی رو حذف میکنه.
class Person(string firstName, string lastName)
{
// پارامتر firstName مستقیماً به فیلد عمومی FirstName اختصاص داده میشه
public readonly string FirstName = firstName;
// پارامتر lastName مستقیماً به پراپرتی عمومی LastName اختصاص داده میشه
public string LastName { get; } = lastName;
}
2️⃣ ماسک کردن (Masking) و تغییرناپذیری
یه تکنیک جالب، تعریف یه فیلد readonly با همون اسم پارامتره. در این حالت، فیلد، پارامتر اصلی رو "ماسک" میکنه. این کار یه راه ساده برای اطمینان از اینه که مقدار اولیه، بعد از ساخت آبجکت دیگه تغییر نمیکنه و به صورت داخلی readonly باقی میمونه.
class Person(string firstName, string lastName)
{
// این فیلدها، پارامترهای ورودی رو ماسک میکنن
readonly string firstName = firstName;
readonly string lastName = lastName.ToUpper(); // حتی میتونیم روشون عملیات هم انجام بدیم!
public void Print() => Console.WriteLine(firstName + " " + lastName);
}
3️⃣ اعتبارسنجی (Validation) در لحظه تولد! 🛡
قدرت اصلی اینجاست! شما میتونید منطق اعتبارسنجی رو مستقیماً در مقداردهی اولیه فیلدها پیاده کنید. با استفاده از "throw expressions"، میتونیم کد خیلی تمیزی برای چک کردن null یا مقادیر نامعتبر بنویسیم.
class Person(string firstName, string lastName)
{
// اگه lastName نال باشه، همینجا یه Exception پرتاب میشه
readonly string lastName = lastName ?? throw new ArgumentNullException(nameof(lastName));
public void Print() => Console.WriteLine(firstName + " " + lastName);
}
// new Person("Alice", null); // throws ArgumentNullException
4️⃣ محدودیت مهم: پراپرتیهای خواندنی/نوشتنی ⚠️
با تمام این قدرت، Primary Constructors یه محدودیت مهم دارن. اگه بخواید یه پراپرتی خواندنی/نوشتنی ({ get; set; }) با منطق اعتبارسنجی داشته باشید، کار پیچیده میشه. چون باید اون منطق رو هم در مقداردهی اولیه و هم در اکسسور set تکرار کنید.
در این سناریو، برگشتن به روش سازنده سنتی و صریح معمولاً راه حل تمیزتریه.
🤔 حرف حساب و تجربه شما
Primary Constructors
یه ابزار عالی برای سناریوهای ساده و کلاسهای تغییرناپذیره، ولی مثل هر ابزار دیگهای، باید بدونیم کجا ازش استفاده کنیم و محدودیتهاش رو بشناسیم.
🔖 هشتگها:
#CSharp #DotNet #CSharp12 #Programming #Developer #OOP