🏗 تقسیم کدهای بزرگ با partial در #C: کلاسها و متدهای چندتکه
تا حالا شده یه فایل کد اونقدر بزرگ بشه که پیدا کردن یه متد توش عذابآور باشه؟ یا بخواید کدی که خودتون نوشتید رو از کدی که به صورت خودکار توسط یه ابزار (مثل دیزاینر) تولید شده، جدا کنید؟
سیشارپ برای این کار یه راه حل عالی و تمیز داره: کلمه کلیدی partial.
1️⃣ کلاسهای Partial:
یک کلاس در چند فایل کلمه کلیدی partial به شما اجازه میده تعریف یک کلاس، struct یا اینترفیس رو در چند فایل مختلف تقسیم کنید. کامپایلر موقع کامپایل، تمام این تیکهها رو به هم میچسبونه و به عنوان یک کلاس واحد در نظر میگیره.
مهمترین کاربرد: جداسازی کدهای دستنویس شما از کدهای اتوماتیک.
فایل ۱ (اتوماتیک): PaymentForm.g.cs
// این بخش توسط یک ابزار ساخته شده
public partial class PaymentForm
{
// ... کنترلهای دیزاینر و کدهای اتوماتیک
}
فایل ۲ (دستنویس): PaymentForm.cs
// این بخش رو شما مینویسید
public partial class PaymentForm
{
// ... منطق و ایونتهای مربوط به فرم
}
2️⃣ متدهای Partial: قلابهای جادویی که ناپدید میشن! 🎩
این قابلیت به شما اجازه میده در یک بخش از کلاس (معمولاً کد اتوماتیک)، یک "قلاب" یا تعریف متد بدون بدنه بذارید. بعداً در بخش دیگه کلاس (کد دستنویس)، میتونید اون متد رو پیادهسازی کنید.
💡نکته جادویی: اگه شما هیچ پیادهسازیای براش ارائه ندید، کامپایلر هم تعریف و هم تمام فراخوانیهای اون متد رو از کد نهایی حذف میکنه! این یعنی هیچ هزینه پرفورمنسی نداره.
فایل ۱ (اتوماتیک):
public partial class PaymentForm
{
public void Submit()
{
// یه قلاب برای اعتبارسنجی قبل از ارسال
ValidatePayment(this.Amount);
// ...
}
// تعریف متد partial (بدون بدنه)
partial void ValidatePayment(decimal amount);
}
فایل ۲ (دستنویس):
public partial class PaymentForm
{
// پیادهسازی متد partial
partial void ValidatePayment(decimal amount)
{
if (amount > 1000)
{
// ... منطق اعتبارسنجی ...
}
}
}
3️⃣ متدهای Partial توسعهیافته (از 9 #C) 🚀
این نسخه جدیدتر، برای کار با Source Generatorها طراحی شده. در این حالت، شما تعریف متد رو مینویسید و انتظار دارید که Source Generator بدنه اون رو تولید کنه. این متدها دیگه اختیاری نیستن و باید پیادهسازی بشن و میتونن خروجی و پارامتر out هم داشته باشن.
🔖 هشتگها:
#CSharp #Programming #DotNet #CleanCode #Partial