Extension method درسی شارپ، راهی برای کارایی بالا در کدها
1399-02-25

Extension method درسی شارپ، راهی برای کارایی بالا در کدها

اکستنشن (extension) درسی شارپ

شما قبلا با مفاهیم اولیه و تا حدودی با مباحث اصلی و آموزش سی شارپ مقدماتی آشنایی دارید. حالا که به یک برنامه نویس حرفه ای تبدیل شده اید، وقت آن است که با هم درباره Extension methodها صحبت کنیم و بدانیم Extension method چیست؟
چه کاربردی دارد؟
چگونه میتوان از آنها استفاده کرد؟
آیا میتوان یک Extension method متد ساخت؟ چگونه؟

قبل از تعریف، دانستن این نکته حائز اهمیت است که حتما باید از قبل، آشنایی با کلاس ها و اعضای static را برای یادگیری Extension method ها فراگرفته باشید. با توجه به این نکته موقعیتی را در نظر بگیرید که می خواهید به یک کلاس متدی اضافه کنید. اما یا کد کلاس در اختیار شما نیست و یا نمی خواهید کد اصلی کلاس دستکاری شود. برای اینکار از Extension Method ها استفاده می شود.

تعریف Extension method:

متدهایی هستند که متعلق به هیچگونه کلاسی نیستند و ازطریق کلاس های دیگر اضافه میشوند. در واقع متدهای Extension همانطور که از نامشان پیداست متد های اضافی هستند. میتوان متدهای Extension را به اینترفیس ها، ساختارها و کلاس ها در سی شارپ، اضافه کرد. این کار بدون تغییر و ویرایش ساختارها، کلاس ها و اینترفیس ها انجام می شود. متدهای Extension می توانند به کلاس های تعریف شده توسط برنامه نویس و یا کلاس های تعریف شده در دات نت فریمورک اضافه شوند.

ساختار نوشتاری Extension method:

ابتدا باید یک کلاس static برای Extension Method ها تعریف کنیم. به ازای هر Extension Method، متدی با ساختار زیر داخل کلاس static تعریف شده ایجاد می کنیم:
public static {return-type}  {name} (this {data type}  {instance name}, {parameters})
{
}

آموزش سی شارپ

  • return-type: نوع داده بازگشتی متد را مشخص می کند.
  • name: نام متدی که قرار است به شئ مورد نظر از یک کلاس اضافه شود. این نام کاملاً دلخواه است.
  • this: نوع شی که قراراست به تابع رجوع کند. 
  • data type: نوع داده ای که تصمیم داریم به شئ های آن یک متد اضافه کنیم.
  • instance name: نام متغیری که به واسطه آن می خواهیم به شئ ای که متد بر روی آن ایجاد می شود دسترسی داشته باشیم را مشخص می کند.این نام کاملاً دلخواه است.
  • parameters: لیست پارامترهای ورودی متدی که قصد تعریف آن را داریم مشخص می کند.
فرض کنید، میخواهیم به نوع داده int یک متد اضافه کنیم که یک عدد را به عنوان ورودی گرفته و عدد داخل متغیر ایجاد شده را به توان ورودی رسانده و برگرداند. برای این کار کافیست ابتدا کلاسی برای Extension Method ها اضافه کنیم: 
 
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() به ریال:

برای تبدیل متدprice() در سی شارپ به ریال به روش زیر عمل میکنیم. ابتدا کلاسی برای Extension Method تعریف میکنیم و کد زیر را مینویسیم:
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 استفاده کنید.

  • سوم اینکه اگر یک تابع توسعه تعریف کردیم ولی یک توسعه داخلی با الگوی مشابه وجود داشته باشد، اولویت با توسعه داخلی میباشد.

  • و نکته دیگر رویدادها و عملگرها قابل توسعه نیستند !

 

 

مقالات مرتبط

pug (پاگ) چیست و از آن چه میدانید؟

pug (پاگ) چیست
مرضیه فتاحی
10

حتما اسم پاگ را شنیده اید اما در دنیای برنامه نویسی چه میکند؟ با ما همراه شوید تا هر آنچه که درباره pug چیست را میخواهید، برایتان ارائه دهیم. پیشنهاد میکنم این مطلب را از دست ندهید.

مطالعه مقاله

چگونه یک طراح وب موفق شوم؟

روش هایی که شما را طراح وب حرفه ای می کند!
فاطمه گلشنی پایدار
10

در این مطلب یاد خواهید گرفت که راه و رسم طراح وب حرفه ای چگونه می باشد.

مطالعه مقاله

سیستم مدیریت پایگاه داده یا DBMS چیست

انواع سیستم های مدیریت پایگاه داده
زهرا چگینی
10

با خواندن مطلب سیستم مدیریت پایگاه داده، می توانید با وظایف و نحوه عملکرد آنها آشنا شوید و بدانید که استفاده کردن از DBMS ها چه مزایا و معایبی دارد.

مطالعه مقاله

saas چیست؟ سرویس مبتنی بر فضای ابری

Software as a Service چه کاربردی دارد؟
زهرا چگینی
10

شما با سرویس مبتنی بر فضای ابری آشنا هستید؟ مطلب امروز ما در مورد یکی از این سرویس ها به نام saas می باشد، ما بررسی کرده ایم که saas چیست و چطور می توانید از آن استفاده کنید.

مطالعه مقاله

14 مورد از پرفروش ترین کتاب های پایتون که باید بخوانید

14 کتاب برتر آموزش پایتون از مبتدی تا حرفه ای
رکسانا طالبی
10

14 کتاب برتر آموزش زبان برنامه نویسی پایتون از مبتدی تا حرفه ای

مطالعه مقاله

قدرت زبان پایتون در چیست؟

قدرت زبان پایتون
زهرا چگینی
10

زبان پایتون در طراحی اپلیکیشن و برنامه نویسی تحت وب و نرم افزار های مهندسی مورد استفاده قرار گرفته است. اما چه چیزی باعث قدرت زبان پایتون شده است.

مطالعه مقاله