شما می توانید با عضویت در انجمن پرسش و پاسخ درسمن هرگونه سوالی دارید را مطرح کنید

Extension method درسی شارپ

تاریخ بروزرسانی : یکشنبه 26 خرداد 1398

تعداد بازدید : 169

گروه دوره : برنامه نویسی وب

زمان خواندن مقاله : 10

هدف ما آشنایی شما باextension method و نحوه استفاده وهمچنین کاربرد این متدها درکد نویسی برای یادگیری شما برنامه نویسان حرفه ای تهیه شده است.

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 تعریف شده ایجاد می کنیم :
({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 استفاده کنید.
سوم اینکه اگر یک تابع توسعه تعریف کردیم ولی یک توسعه داخلی با الگوی مشابه وجود داشته باشد، اولویت با توسعه داخلی میباشد .
و نکته دیگر رویدادها و عملگرها قابل توسعه نیستند !
 

 


اشتراک گذاری


توضیحاتی در مورد نویسنده این مقاله :
مرضیه فتاحی مرضیه فتاحی

کارشناس کامپیوتر گرایش نرم افزار..... نویسندگی،تجربه ای انفرادی است یعنی به اشتراک گذاری.... این بخشی از ذات انسان است که بخواهد مسائل را به اشتراک بگذارد ازجمله:افکار،ایده ها،عقاید


نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد .
برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

گروه مقالات


آموزشی
14
علمی
11
تحقیقاتی
12


به دنبال هر آموزشی هستید در اینجا به دنبال آن باشید .