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

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


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


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


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


public static class Extensions

{

extension(IEnumerable source)

{

public IEnumerable WhereGreaterThan(int threshold)

=> source.Where(x => x > threshold);


public bool IsEmpty

=> !source.Any();

}

}

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

WhereGreaterThan(this IEnumerable source, int threshold)

در حالیکه:


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


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


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


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

extension(IEnumerable source)

where T : INumber

{

public IEnumerable WhereGreaterThan(T threshold)

=> source.Where(x => x > threshold);


public bool IsEmpty

=> !source.Any();

}

🔗 رفرنس

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


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