اینجا میتونی برنامه نویسی ویندوز رو به طور کاملا رایگان یاد بگیری
2 سال پیش / خواندن دقیقه

آشنایی با متدهای Extension در سی شارپ + مثال

با استفاده از متدهای 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 را تعریف کرد. یک متد 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 مشخص میشود.

شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع