با استفاده از متدهای Extension میتوان بدون تغییر و ویرایش کلاس ها و ساختار های از قبل تعریف شده به آنها قابلیت های جدید افزود. در این فصل با متدهای Extension آشنا خواهیم شد.
متدهای Extension
متدهای Extension
همانطور که از نامشان پیداست متد های اضافی هستند. میتوان متدهای Extension را به کلاس ها، ساختارها و اینترفیس ها اضافه کرد. این کار بدون تغییر و ویرایش ساختارها، کلاس ها و اینترفیس ها انجام می شود. متدهای Extension می توانند به کلاس های تعریف شده توسط برنامه نویس و یا کلاس های تعریف شده در دات نت فریمورک اضافه شوند. در نمونه مثال زیر ()IsGreaterThan
یک متد Extension بوده که برای نوع داده ای int
تعریف شده است. در نمونه مثال زیر اگر مقدار i
بزرگتر از مقدار ۱۰۰ باشد، مقدار true
را برمیگرداند :
int i = 10;
bool result = i.IsGreaterThan(100); //returns false
متد ()IsGreaterThan
بالا متدی نیست که در ساختار int تعریف شده باشد. این متد در واقع توسط برنامه نویس به نوع داده ای int
اضافه شده است. در اینتلیسنس ویژوال استادیو از یک سمبل خاص (فلش رو به پایین) برای تفاوت بین متد های معمولی و Extension استفاده میشود :
اکنون بیایید ببینیم چطور میتوان یک متد Extension را تعریف کرد. یک متد Extension یک متد static
بوده که در یک کلاس static
تعریف می شود. برای تعریف یک متد Extension ابتدا باید یک کلاس static تعریف کرد. در نمونه مثال زیر کلاس IntExtensions
را تعریف کردهایم :
namespace ExtensionMethods
{
public static class IntExtensions
{
}
}
اکنون میتوان یک متد static را نیز تعریف کرد. در تعریف این متد از کلمه کلیدی this
استفاده می کنیم. در این صورت نشان خواهیم داد این متد برای کلاس و یا ساختار باید قابل استفاده باشد. در مثال زیر متد ()IsGreaterThan بر روی نوع داده ای int باید اعمال شود. پس اولین پارامتر به شکل this int i
مشخص میشود :
namespace ExtensionMethods
{
public static class IntExtensions
{
public static bool IsGreaterThan(this int i, int value)
{
return i > value;
}
}
}
اکنون با افزودن فضای نامی ExtensionMethods
به برنامه می توان از متد ()IsGreaterThan
تعریف شده استفاده نمود :
using ExtensionMethods;
class Program
{
static void Main(string[] args)
{
int i = 10;
bool result = i.IsGreaterThan(100);
Console.WriteLine(result);
}
}
خروجی نمونه مثال بالا به شکل زیر است :
false
نکته : تنها تفاوت بین یک متد استاتیک معمولی و متد استاتیک Extension در این است که اولین پارامتر از متد Extension نوعی را مشخص میکند که متد مورد نظر قرار است کاری روی آن انجام دهد و این پارامتر با کلمه کلیدی this مشخص میشود.