مانده تا پایان تخفیف ۳۰ درصدی آموزش های ویدئویی سایت (کلیک کنید)

متدهای جنریک

اگر بخواهید چندین متد با عملکرد مشابه ایجاد کنید و فقط تفاوت آنها در نوع داده ای باشد که قبول می کنند (مثلا یکی نوع int و دیگری نوع double را قبول کند) می توان از متدهای جنریک برای صرفه جویی در کدنویسی استفاده کرد. ساختار عمومی یک متد جنریک به شکل زیر است :

returnType methodName<type> (type argument1)
{
    type someVariable;
}

مشاهده می کنید که بعد از نام متد یک نوع در داخل دو علامت بزرگتر و کوچکتر آمده است ( <type> ) که همه انواع در سی شارپ می توانند جایگزین آن شوند.
برنامه زیر مثالی از نحوه استفاده از متد جنریک می باشد :

using System;

public class Program
{
    public static void Show<X>(X val)
    {
        Console.WriteLine(val);
    }

    public static void Main()
    {
        int intValue = 5;
        double doubleValue = 10.54;
        string stringValue = "Hello";
        bool boolValue = true;

        Show(intValue);
        Show(doubleValue);
        Show(stringValue);
        Show(boolValue);
    }
}
5
10.54
Hello
true

یک متد جنریک ایجاد کرده ایم که هر نوع داده ای راقبول کرده و مقادیر آنها را نمایش می دهد (خطوط 8-5). سپس داده های مختلفی با وظایف یکسان به آن ارسال می کنیم. متد نیز نوع X را بسته به نوع داده ای که به عنوان آرگومان ارسال شده است تغییر می دهد. به عنوان مثال وقتی یک داده از نوع int ارسال می کنیم، همه مکانهایی که X در آنها وجود دارد به int تبدیل می شوند و متد به صورت زیر در می آید :

public static void Show (int val)
{
    Console.WriteLine(val);
}

همچنین هنگام فراخوانی متد جنریک صریحا می توانید نوعی را که به وسیله آن مورد استفاده قرار می گیرد ذکر کنید (البته لازم نیست).به عنوان مثال فراخوانی های متد بالا را می توان به صورت زیر هم نوشت :

Show<int>(intValue);
Show<double>(doubleValue);
Show<string>(stringValue);
Show<bool>(boolValue);

به یک نکته در مورد استفاده از متدهای جنریک توجه کنید و آن این است که شما نمی توانید در داخل کدهای مربوط به متد محاسبات انجام دهید مثلا دو عدد را با هم جمع کنید چون کامپایلر نمی تواند نوع واقعی عملوندها را تشخیص دهد، ولی به سادگی می توان مقادیر را در داخل متد نشان داد چون کامپایلر هر نوع داده ای را که توسط متد Console.WriteLine()  استفاده می شود را می تواند تشخیص دهد.

public static void Show<X>(X val1, X val2)
{
    Console.WriteLine(val1 + val2);
}

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

public static void Show<X, Y>(X val1, Y val2)
{
    Console.WriteLine(val1);
    Console.WriteLine(val2);
}

به مثال زیر که در آن دو مقدار مختلف به متد ارسال شده است توجه کنید :

Show(5, true);

// OR

Show<int, bool>(5, true);

مشاهده می کنید که X با نوع int و Y با نوع bool جایگزین می شود. این نکته را نیز یادآور شویم که شما می توانید دو آرگومان هم نوع را هم به متد ارسال کنید :

Show(5, 10);

// OR

Show<int, int>(5, true);

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. بهنام پاسخ دادن

    خیلی خوب گفتی – مرسی.

  2. مسلم جهان پور پاسخ دادن

    باسلام
    بنده مطالعه کردم.مطالب مفیدی بود.
    تشکر میکنم به خاطر آموزش های شما.

    • یونس ابراهیمی پاسخ دادن

      سلام، لطف دارین

  3. دنی پاسخ دادن

    ! Perfect

  4. سامان پاسخ دادن

    حق اشتراک ماهیانه سایتتون واقعا بالاست…!
    سعی کنید پولی که دریافت می کنید متناسب با نحوه و میزان ارائه مطالبتان باشه…!

    • یونس ابراهیمی پاسخ دادن

      سلام دوست عزیز، بسیار ممنون بابت نظرتون
      خیلی برام جالبه که ماها فقط روزانه ۳۰-۴۰ هزار هزینه چیپس و پفک می کنیم و اونوقت که نوبت به یادگیری میرسه ، اونم یادگیری بالای ۸۰۰ مطلب اموزشی ، حاضر به پرداخت ۱۰ هزار تومان نیستیم!!!
      شما تو کدوم سایت مطالبی با این روانی و سادگی پیدا می کنید؟
      اینو هم اضافه کنم که این تعداد مطلب رو تو آموزشگاه ها با ۵۰۰ هزار هم آموزش نمیدن
      شاید باورتون نشه ولی برخی مطالب به خاطر وسواس فراوان حدود ۲ روز زمان میبره تا تو سایت قرار داده بشن
      موفق و موید باشین

      • سامان پاسخ دادن

        سلام دوست عزیز…من در شهری زندگی می کنم که هزینه یک روز یک خانواده به زور به ۱۰هزار تومن میرسه و درآمد از این هم پایین تره…!(حالا شاید توی یک سال هم چیپس یا پفک به چشم نبینن)…سایت هایی به زبان فارسی و سایتهای بسیار بسیار زیادی به زبان انگلیسی در دسترس هستند و همچنین کتابهای فراوان چه توی اینترنت و چه توی بازار (که همه نویسنده هاشون نویسنده معتبر جهانی هستند مثل: دایتل و دایتل)…آموزشگاه هم که اوضاعش کاملا فرق میکنه و فرد با استاد رودر رو هست و همین کیفیت یادگیری رو چندین برابر میکنه ( همنطور که ما نمیتونیم صرفا کتاب خوندن رو جایگزین دانشگاه رفتن کنیم)…موفق و مؤید باشید…!

        • یونس ابراهیمی

          حق با شماست
          من نمی دونم از کی با سایت بنده آشنا شدین، ولی یه زمانی اشتراک VIP هزینش ۲۰۰۰ تومان بود باز هم اعتراض می کردن، بنده به تجربه و در طول این سه سال که سایت رو راه اندازی کردم به این پی بردم که ((ایراد بنی اسرائیلی))، همیشه هست، کسی که طالب علم باشه حاضره هزینه کنه و کسی هم که نباشه شما مطلب مفت بذاری ، میگه چرا مفته!!!!!
          منم این مطالب رو اکثرا ترجمه کردم و در کل براشون زحمت کشیدم، خیلی هاشون رو هم به تجربه گذاشتم. من تمام کتاب های بازار ایران رو دارم همین دایتل و دایتل رو که می فرمایید یکی از مطالبش رو با معادل اون تو سایت مقایسه بفرمایید و ببینید کدوم بهتره.
          در مورد استاد هم باید عرض کنم درسته سر کلاس بودن خوبه ولی قبول کنید که اون دوره دیگه گذشته که آدم عمرشو سر کلاس تلف کنه، الان فیلم های آموزشی هیچ نقطه ابهامی واسه آدم نمیذارن