TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #572 231
✅ بهترین روش‌ها برای سازمان‌دهی کدهای Extension در C# 14 🧩✨
🗂 چطور Extension Blockها را سازمان‌دهی کنیم؟

وقتی از کلیدواژه extension استفاده می‌کنید، می‌توانید چندین extension member که روی یک type اعمال می‌شوند را داخل یک extension block قرار دهید.
این کار باعث کاهش تکرار 🔁 و کنار هم ماندن کدهای مرتبط می‌شود 🧠

همچنین می‌توانید در یک static class چند extension block داشته باشید؛
مثلاً برای receiverهای متفاوت یا generic type parameterهای مختلف 👇
public static class CollectionExtensions
{
extension<T>(IEnumerable<T> source)
{
public bool IsEmpty => !source.Any();

public bool HasItems => source.Any();

public int Count => source.Count();
}

extension(IEnumerable<string> source)
{
public string JoinWithComma() => string.Join(", ", source);
public IEnumerable<string> NonEmpty() => source.Where(s => !string.IsNullOrEmpty(s));
}

extension<T>(List<T> list)
{
public void AddIfNotExists(T item)
{
if (!list.Contains(item))
{
list.Add(item);
}
}
}
}

🔄 ترکیب syntax قدیمی و جدید

می‌توانید syntax قدیمی (this) و syntax جدید (extension) را در یک کلاس با هم استفاده کنید 👍
public static class StringExtensions
{
// Traditional syntax
public static bool IsEmail(this string value)
{
return value.Contains("@");
}

// New syntax
extension(string value)
{
public bool IsUrl =>
Uri.TryCreate(value, UriKind.Absolute, out _);

public string ToTitleCase() =>
CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value.ToLower());
}
}

🚫 از ساختن Extension Classهای غول‌پیکر اجتناب کنید

یک کلاس بزرگ با extension برای ده‌ها type مختلف، به‌مرور تبدیل به کابوس نگهداری می‌شود 😵‍💫
بهتر است extensionها را بر اساس domain یا کاربرد گروه‌بندی کنید 👇
public static class ProductExtensions
{
extension(Product product)
{
// Product-specific extensions
}
}

public static class ValidationExtensions
{
extension(Order value)
{
// Validation logic
}
extension(OrderItem value)
{
// Validation logic
}
}

📌 انتخاب ساختار مناسب کاملاً به نیاز پروژه بستگی دارد:
یا یک static class برای هر type
یا گروه‌بندی بر اساس functionality

🧮 برای مقادیر محاسباتی از Extension Property استفاده کنید

اگر extensionای دارید که پارامتری نمی‌گیرد و فقط یک مقدار برمی‌گرداند،
بهتر است به‌جای method، آن را property تعریف کنید 👌
extension(Order order)
{
public decimal TotalPrice =>
order.Items.Sum(item => item.Price * item.Quantity);
}

✍️ نام‌گذاری معنادار انتخاب کنید

ءExtension propertyها باید طوری خوانده شوند که انگار عضو اصلی type هستند.
از نام‌هایی که «داد می‌زنند extension هستند» پرهیز کنید ❌
// Good
public bool IsEmpty => !source.Any();
public string DisplayPrice => price.ToString("C");

📚 ءExtensionها را مستند کنید

در پروژه‌های بزرگ، حتماً از XML Comment استفاده کنید تا بقیه اعضای تیم دقیقاً بدانند این extension چه کاری انجام می‌دهد 🧑‍💻📖
extension(Product product)
{
/// <summary>
/// Gets whether the product is currently available for purchase.
/// </summary>
/// <remarks>
/// A product is available if its stock quantity is greater than zero.
/// </remarks>
public bool IsAvailable => product.StockQuantity > 0;
}

🧾 جمع‌بندی

کلیدواژه extension در C# 14 اختیاری است ✅
تمام extension methodهای قبلی شما بدون هیچ تغییری همچنان کار می‌کنند.
اما زمانی که:
می‌خواهید property اضافه کنید 🧩
ءmemberهای static داشته باشید 🏗
یا کدهای مرتبط را تمیزتر و یک‌جا نگه دارید 🧹
ءsyntax جدید تجربه توسعه‌دهنده بسیار بهتری فراهم می‌کند ✨

اگر با C# 14 و NET 10. کار می‌کنید، حتماً extension propertyها را در پروژه‌هایتان امتحان کنید.
به‌زودی متوجه می‌شوید چقدر جا دارد methodها به property تبدیل شوند و کدها طبیعی‌تر و قابل‌فهم‌تر شوند 🧠💡

امیدوارم این مطلب براتون مفید بوده باشه 🙌
تا مطلب بعدی، موفق باشید 👋
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →