اکستنشن متد در سی شارپ چیست و چگونه از آن استفاده کنیم؟
اکستنشن متد در سی شارپ چیست؟ این متدها امکان افزودن قابلیت به انواع موجود را بدون تغییر کلاس فراهم میکنند.
20 آبان 1405
لینک کوتاه
اکستنشن متد در سی شارپ چیست و چگونه از آن استفاده کنیم؟
اکستنشن متد (Extension Method) یکی از قابلیتهای کاربردی زبان برنامهنویسی سی شارپ است که به برنامهنویسان اجازه میدهد بدون تغییر کد اصلی یک کلاس و بدون ایجاد کلاس فرزند، متدهای جدیدی را به انواع موجود اضافه کنند.با استفاده از این قابلیت میتوان متدهایی برای کلاسهای خودمان یا حتی انواعی مانند string، int و DateTime تعریف کرد.
اکستنشن متدها در پروژههای بزرگ و کوچک کاربرد دارند و به خواناتر شدن کدها کمک میکنند.
برای مثال، فرض کنید میخواهید قابلیتی برای بررسی خالی بودن یک رشته یا محاسبه میانگین اعداد ایجاد کنید.
بهجای اینکه همیشه یک متد کمکی را از طریق نام کلاس فراخوانی کنید، میتوانید آن را به شکل یک متد معمولی روی شیء موردنظر اجرا کنید.

آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
اکستنشن متد چگونه کار میکند؟
برای تعریف یک Extension Method، معمولاً باید یک کلاس static ایجاد کنید و متد موردنظر را نیز با کلمه کلیدی static تعریف کنید. پارامتر اول متد باید با کلمه کلیدی this مشخص شود تا نوعی را که متد به آن اضافه میشود، تعیین کند.
به مثال زیر توجه کنید:
public static class StringExtensions
{
public static bool IsLong(this string text)
{
return text.Length > 10;
}
}
در این مثال، متدی به نام IsLong تعریف کردهایم که بررسی میکند آیا طول رشته بیشتر از ۱۰ کاراکتر است یا خیر.
پارامتر this string text نشان میدهد که این متد برای نوع string قابل استفاده است.
اکنون میتوانیم متد را به شکل زیر فراخوانی کنیم:
string name = "Hello World";
bool result = name.IsLong();
Console.WriteLine(result);
خروجی برنامه برابر با True خواهد بود؛ زیرا طول رشته از ۱۰ کاراکتر بیشتر است.
نکته مهم این است که اکستنشن متد، متد واقعی جدیدی به کلاس string اضافه نمیکند.
کامپایلر امکان فراخوانی آن را به شکلی مشابه متدهای نمونه فراهم میکند.
قوانین تعریف اکستنشن متد در سی شارپ
برای استفاده صحیح از Extension Method باید چند نکته را در نظر بگیرید.کلاس باید استاتیک باشد: متدهای اکستنشن معمولاً داخل یک کلاس static تعریف میشوند.
خود متد باید استاتیک باشد: متد اکستنشن با کلمه کلیدی static تعریف میشود.
پارامتر اول باید دارای this باشد: این پارامتر نوعی را مشخص میکند که متد برای آن قابل فراخوانی است.
فضای نام باید در دسترس باشد: اگر متد در یک Namespace جداگانه تعریف شده باشد، باید آن Namespace را با using وارد کنید؛ مگر اینکه از قبل در محدوده دسترسی قرار داشته باشد.
ایجاد اکستنشن متد برای نوع int
اکستنشن متدها فقط برای رشتهها نیستند و میتوان از آنها برای انواع عددی نیز استفاده کرد.فرض کنید میخواهیم متدی بسازیم که مشخص کند یک عدد زوج است یا خیر.
public static class IntExtensions
{
public static bool IsEven(this int number)
{
return number % 2 == 0;
}
}
حالا میتوانیم این متد را به شکل زیر استفاده کنیم:
int number = 12;
Console.WriteLine(number.IsEven());
خروجی:
True
در این مثال، متد IsEven برای تمام مقادیر از نوع int قابل استفاده است؛ به شرط اینکه کلاس اکستنشن و فضای نام آن در دسترس باشند.
این روش باعث میشود منطق بررسی زوج بودن اعداد در یک محل متمرکز شود و در قسمتهای مختلف برنامه بتوان از آن استفاده کرد.
استفاده از اکستنشن متد برای رشتهها
یکی از کاربردهای رایج Extension Method، ایجاد قابلیتهای کمکی برای رشتههاست.برای مثال، میتوانیم متدی بنویسیم که بررسی کند یک رشته دارای مقدار است یا فقط شامل فاصلههای خالی است.
public static class StringExtensions
{
public static bool HasValue(this string text)
{
return !string.IsNullOrWhiteSpace(text);
}
}
استفاده از این متد به شکل زیر است:
string title = " آموزش سی شارپ ";
if (title.HasValue())
{
Console.WriteLine("رشته دارای مقدار است.");
}
متد string.IsNullOrWhiteSpace بررسی میکند که رشته null، خالی یا فقط شامل کاراکترهای فاصله و فضای سفید نباشد.
بنابراین، اکستنشن متد بالا از فراخوانی مستقیم Length روی یک رشته احتمالا خالی یا null جلوگیری میکند و برای این بررسی نیازی به نوشتن شرطهای تکراری در بخشهای مختلف برنامه نیست.

تفاوت اکستنشن متد با متد معمولی
در یک متد معمولی، برای اجرای عملیات باید متد را از طریق کلاس یا نمونهای که آن را تعریف کرده است فراخوانی کنید.برای مثال:
public static class NumberHelper
{
public static bool IsPositive(int number)
{
return number > 0;
}
}
فراخوانی این متد به شکل زیر انجام میشود:
bool result = NumberHelper.IsPositive(15);
اما اگر همین قابلیت به شکل اکستنشن متد تعریف شود، میتوانیم آن را مستقیماً روی مقدار عددی فراخوانی کنیم:public static class NumberExtensions
{
public static bool IsPositive(this int number)
{
return number > 0;
}
}
اکنون استفاده از آن به این شکل خواهد بود:
int number = 15;
bool result = number.IsPositive();
هر دو روش میتوانند نتیجه یکسانی داشته باشند. تفاوت اصلی در شیوه فراخوانی و خوانایی کد است.
آیا میتوان اکستنشن متد را برای کلاسهای خودمان تعریف کرد؟
بله. اکستنشن متدها محدود به کلاسهای آماده داتنت نیستند.شما میتوانید برای کلاسهایی که خودتان نوشتهاید نیز Extension Method تعریف کنید.
برای مثال، فرض کنید کلاس زیر را داریم:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
}
میتوانیم متدی برای بررسی گرانقیمت بودن محصول ایجاد کنیم:
public static class ProductExtensions
{
public static bool IsExpensive(this Product product)
{
return product.Price >= 1000000;
}
}
اکنون میتوانیم از این متد استفاده کنیم:
Product product = new Product
{
Name = "Laptop",
Price = 2500000
};
Console.WriteLine(product.IsExpensive());
این مثال نشان میدهد که Extension Method میتواند برای توسعه قابلیتهای کلاسهای اختصاصی نیز مفید باشد.
نکات مهم در استفاده از اکستنشن متد
اکستنشن متدها قابلیت مفیدی هستند، اما استفاده بیشازحد از آنها ممکن است باعث پیچیدگی کد شود.بهتر است متدهایی را به این شکل تعریف کنید که از نظر مفهومی با نوع موردنظر ارتباط داشته باشند.
همچنین، اکستنشن متد نمیتواند به اعضای خصوصی کلاس مقصد دسترسی مستقیم داشته باشد؛ زیرا در واقع عضوی از آن کلاس نیست.
اگر متدی با همان نام و امضای مناسب بهصورت عضو واقعی کلاس وجود داشته باشد، هنگام فراخوانی نمونهای، عضو واقعی کلاس بر اکستنشن متد اولویت دارد.
در نسخههای جدید سی شارپ، قابلیتهای بیشتری برای توسعه کد وجود دارد؛ اما Extension Method همچنان روشی ساده و پرکاربرد برای اضافهکردن رفتارهای کمکی بدون تغییر کلاس اصلی است.

جمعبندی
اکستنشن متد در سی شارپ قابلیتی است که امکان تعریف متدهای جدید برای انواع موجود را بدون تغییر کد اصلی آنها فراهم میکند.برای تعریف این متدها، معمولاً یک کلاس static و یک متد static ایجاد میکنیم و پارامتر اول را با کلمه کلیدی this مشخص میکنیم.
با استفاده از این قابلیت میتوان متدهای کاربردی برای انواعی مانند string، int و کلاسهای اختصاصی پروژه ایجاد کرد.
Extension Method به خوانایی بیشتر کد، کاهش تکرار و سازماندهی بهتر منطق برنامه کمک میکند؛ به شرط آنکه متدها با هدف مشخص و به شکل اصولی طراحی شوند.

کاربران ما
شما هم نظرتون با ما دریاره “اکستنشن متد در سی شارپ چیست و چگونه از آن استفاده کنیم؟” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید