📔 قابلیت Extension members در سی‌شارپ ۱۴

👁 969 بازدید ❤️ 14 واکنش 📤 5 فوروارد

📔 قابلیت Extension members در سی‌شارپ ۱۴

بالاخره بعد از کش‌وقوس‌های فراوون (شروع جدی‌اش از سال ۲۰۲۱ بود) بالاخره امکان Extension members به سی‌شارپ ۱۴ (نسخه پیش‌نمایش ۳) اومد.


از سی‌شارپ ۳ می‌تونیم اکستنشن‌متد برای تایپ‌ها بنویسیم. ولی حالا دیگه محدود به متد نیستیم و property و static method هم پشتیبانی می‌شه.


توی سی‌شارپ ۱۴ یه بلاک جدید به نام extension داریم:



public static class Extensions
{
    extension(IEnumerable<int> source) 
    {
        public IEnumerable<int> WhereGreaterThan(int threshold)
            => source.Where(x => x > threshold);

        public bool IsEmpty
            => !source.Any();
    }
}

توی مثال بالا، عملا دیگه از this استفاده نشده، قبلا همین رو باید اینجوری می‌نوشتیم:


WhereGreaterThan(this IEnumerable<int> source, int threshold)

در حالیکه:


*️⃣بخش extension(IEnumerable source): اینجا نشون می‌ده که بلاک اکستنشن با یک receiver از نوع IEnumerable شروع شده.


*️⃣متد WhereGreaterThan: بدون نیاز به استفاده از this، چون receiver به صورت ضمنی تو بلاک extenstion در دسترسه.


*️⃣پراپرتی IsEmpty: هم به راحتی بر اساس receiver تعریف شده که چک می‌کنه آیا لیست خالی هست یا نه.


حتی اینو می‌تونید به صورت جنریک هم بنویسید:


extension<T>(IEnumerable<T> source)
    where T : INumber<T>
{
    public IEnumerable<T> WhereGreaterThan(T threshold)
        => source.Where(x => x > threshold);

    public bool IsEmpty
        => !source.Any();
}

🔗 رفرنس

🔗 مباحثات اولیه


💬 به نظرتون چقدر کاربردیه؟


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