قبل از تعریف، دانستن این نکته حائز اهمیت است که حتما باید از قبل، آشنایی با کلاس ها و اعضای static را برای یادگیری Extension method ها فراگرفته باشید. با توجه به این نکته موقعیتی را در نظر بگیرید که می خواهید به یک کلاس متدی اضافه کنید. اما یا کد کلاس در اختیار شما نیست و یا نمی خواهید کد اصلی کلاس دستکاری شود. برای اینکار از Extension Method ها استفاده می شود.
تعریف Extension method:
ساختار نوشتاری Extension method:
public static {return-type} {name} (this {data type} {instance name}, {parameters})
{
}
- return-type: نوع داده بازگشتی متد را مشخص می کند.
- name: نام متدی که قرار است به شئ مورد نظر از یک کلاس اضافه شود. این نام کاملاً دلخواه است.
- this: نوع شی که قراراست به تابع رجوع کند.
- data type: نوع داده ای که تصمیم داریم به شئ های آن یک متد اضافه کنیم.
- instance name: نام متغیری که به واسطه آن می خواهیم به شئ ای که متد بر روی آن ایجاد می شود دسترسی داشته باشیم را مشخص می کند.این نام کاملاً دلخواه است.
- parameters: لیست پارامترهای ورودی متدی که قصد تعریف آن را داریم مشخص می کند.
public static class IntExtensions
{
}
بهتر است برای Extension Method های هر نوع داده، یک کلاس جداگانه ایجاد کنیم مانند LongExtensions یا CustomExtensions. بخش اول، اشاره به کلاسی می کند که ما تصمیم داریم برای آن Extension Method ایجاد کنیم. در ادامه متدی با نام Pow به نوع داده Int اضافه می کنیم:
public static class IntExtensions
{
public static int Pow(this int number, int pow)
{
int result = 1;
for (int counter = 0; counter < pow; counter++)
result = result*number;
return result;
}
}
حال برای استفاده از این متد کافیست آن را برای متغیرهایی از نوع int در متد اصلی برنامه یعنی متد main() به صورت زیر فراخوانی کنیم:
int myNum = 4;
var pow = myNum.Pow(3);
Console.WriteLine(pow);
اگر به قسمت تعریف Extension Method بر گردیم، پارامتری با نام number داخل متد Pow میبینیم. در حقیقت این متد به مقدار داخل متغیری اشاره می کند که ما Extension Method را بر روی آن اجرا می کنیم. در کد بالا، پارامتر number به مقدار 4 که داخل متغیر myNum ریخته شده اشاره می کند.
شما برای هر نوع داده و هر کلاسی می توانید Extension متد تعریف کنید. زمانی که Intellisense باز می شود، متد های عادی به صورت یک مکعب نمایش داده می شوند، اما Extension Method ها به صورت یک مکعب که یک فلش آبی رنگ به سمت پایین، در بالای آن قرار دارد نمایش داده می شوند.
تبدیل متد price() به ریال:
public static string ToRial(this int Value)
{
return Value.ToString("#,0 Rial");
}
بعد از تعریف قطعه کد بالا در کلاس Extension Method به متد اصلی یعنی متد ()main رفته و مینوسیم:
public class Program
{
static void Main(string[] args)
{
int Price = 25000;
Console.WriteLine(Price.ToString("#,0 Rial"));
Console.WriteLine(Price.ToRial());
Console.WriteLine(147852369.ToRial());
}
}
اکنون از این کد میتوانید برای تبدیل کردن price به صورت ریال در برنامه استفاده کنید.
نکاتی برای تعریف Extension Method:
-
اول اینکه متد ها را در یک کلاس استاتیک بنویسید.
-
دوم برای اینکه به کامپایلر بگوییم که این تابع، یک تابع توسعه هست باید در اولین پارامتر ورودی از کلمه ی کلیدی this استفاده کنید.
-
سوم اینکه اگر یک تابع توسعه تعریف کردیم ولی یک توسعه داخلی با الگوی مشابه وجود داشته باشد، اولویت با توسعه داخلی میباشد.
-
و نکته دیگر رویدادها و عملگرها قابل توسعه نیستند !
نظر شما در تصمیم دیگران اثرگذار است.
لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.