📔 قابلیت 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
*️⃣متد 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();
}
🔗 رفرنس
💬 به نظرتون چقدر کاربردیه؟