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

👁 814 بازدید ❤️ 19 واکنش 📤 6 فوروارد

📔 دات‌نت ۱۰ (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 تعریف کرد...


← بازگشت به همه پست‌ها