📔 دات‌نت ۱۰ (C# 14): Extension members

📔 دات‌نت ۱۰ (C# 14): Extension members


یکی از بهبودهای دات‌نت C# 14، رو می‌شه Extension membersr دونست که فقط محدود به متد نیستند؛ حالا می‌شه پراپرتی، ایندکسر، و حتی event رو هم به‌صورت اکستنشن برای یک کلاس یا اینترفیس اضافه کرد. این قابلیت‌ها یک جهش بزرگ برای توسعه‌پذیری و Clean Code در نرم‌افزارهای بزرگ به حساب میاد.


فرض کنین چند تا تیم روی قابلیت‌های مختلف پلتفرم کار می‌کنن. حالا به راحتی می‌شه Map کردن آبجکت به DTO و اعتبارسنجی و... با کدهای تمیزتر و بهتری پیاده‌کرد


csharp

public class Order

{

public int Id { get; set; }

public decimal Amount { get; set; }

public string Status { get; set; } = "pending";

public string? Customer { get; set; }

}


public class OrderDto

{

public int Id { get; set; }

public decimal Amount { get; set; }

public string Status { get; set; }

public bool IsPaid { get; set; }

}

و حالا اینجوری با بلاک اکستنشن:


public static class OrderApiExtensions

{

extension(Order order)

{

// متد اکستنشن: تبدیل Domain Model به DTO

public OrderDto ToDto()

=> new OrderDto

{

Id = order.Id,

Amount = order.Amount,

Status = order.Status,

IsPaid = order.IsPaid() // اکستنشن متد دیگه

};


// متد اکستنشن: بررسی پرداخت‌شده بودن سفارش

public bool IsPaid() => order.Status == "paid";


// پراپرتی اکستنشن: نمایش عنوان مشتری

public string? CustomerDisplay =>

string.IsNullOrWhiteSpace(order.Customer) ? "(نامشخص)" : order.Customer;

}

}


و همین تمیزسازی پیاده‌سازی‌های قبلی رو با قابلیت جدید دیگه‌ای که اجازه می‌ده تا instance constructors و events رو هم به صورت partial members تعریف کرد...