نمایش نتایج 1 تا 7 از 7

نام تاپیک: استفاده از Generic Type ها بعنوان پارامتر متد

  1. #1

    Question استفاده از Generic Type ها بعنوان پارامتر متد

    كسي ار دوستان ميدونه كه آيا ميشه از انواع Generic بعنوان پارامتر يك متد استفاده كرد يا نه؟ و اگه ميشه چه جوري؟
    بعبارت ديگه من ميخوام متدي به شكل زير تعريف كنم
    public void MyMethod(IList<T> mylist)
    {
    //do somthings
    }

  2. #2

    نقل قول: استفاده از Generic Type ها بعنوان پارامتر متد

    ميشه يه مثال بزنيد؟

  3. #3

    نقل قول: استفاده از Generic Type ها بعنوان پارامتر متد

    راه حل ساده تر برای شما اینکه بجای Generic ها از Non-generic ها استفاده کنید. مثلا نوع رو روی ArrayList بزارید.
    البته مسئله اینکه هروقت می خواهید اطلاعات درونش رو بخونید باید از Boxing استفاده کنید ( همون Cast کردن و کشف اینکه Object توی لیست از چه Type هستش)
    این مسئله همون دلیلی بود که کلا Generic ها بوجود آمدن !

    برای استفاده از Generic به عنوان پارامتر ورودی شما می تونید یک کلاس از نوع Generic تعریف کنید و بعد از اون کلاس استفاده کنید. در واقع شما یک کلاس جدید مثل ArrayList می سازید که قابل ارسال و دریافت توسط یک متد باشه.
    تکنیک استفاده از Generic به عنوان ورودی پارامتر همینه .

    کلا مزیت اصلی استفاده از Generic ها بجای ArrayList یا Hashtable و امثال آن این است که در مورد Non-generic ها هنگام کد نویسی شما درکی از محتوای درونشان ندارید و باید اصطلاحا برنامه نویسی دفاعی ( خطا یابی یا استفاده از شرط با کمک as و is و ...) پیاده کنید تا مطمئن شوید در زمان اجرای برنامه شی درون مثلا Arraylist از همان نوعی است که انتظار دارید.
    اما اگر از Generic استفاده کنید هنگام کد نویسی Intellisense خود VS اجازه استفاده از Type ها نا همگون را نمی دهد و برنامه را Compile نمی کند. به همین دلیل خیال شما از درستی برنامه راحت می شود.

  4. #4
    مدیر بخش آواتار mmd2009
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    پست
    2,393

    نقل قول: استفاده از Generic Type ها بعنوان پارامتر متد

    با سلام

    راه حل ساده تر برای شما اینکه بجای Generic ها از Non-generic ها استفاده کنید. مثلا نوع رو روی ArrayList بزارید.
    این خلاف اصول کدنوسی مایکروسافته. خود مایکروسافت عملا گفته که از Generic استفاده بکنید. ArrayList به دلایل مثل cast و boxing و ... کارایی لازم رو در مقابل generic هارو ندارن. ( توضیحات تکمیلی بارها گفته شده )

    جالب اونه خودتون هم دلیل اشتباه بودنش رو گفتید ولی بعدش چرا میگید استفاده بکنن ؟

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

    موفق باشید
    آخرین ویرایش به وسیله mmd2009 : چهارشنبه 11 مرداد 1391 در 09:23 صبح دلیل: مثال رو اشتباهه متوجه شدم. همون لینک که دادم مثال داره

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  5. #5
    VIP آواتار gwbasic
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    سن
    42
    پست
    982

    نقل قول: استفاده از Generic Type ها بعنوان پارامتر متد

    T رو باید جلوی نام متد معرفی کنید

    public void MyMethod<T>(IList<T> list)
    {
    }


    اگر احیانا T دارای کلاس پایه ای هست می تونید به صورت زیر مشخص کنید


    public void MyMethod<T>(IList<T> list) where T : BaseClass
    {
    }

  6. #6

    نقل قول: استفاده از Generic Type ها بعنوان پارامتر متد

    این خلاف اصول کدنوسی مایکروسافته. خود مایکروسافت عملا گفته که از Generic استفاده بکنید. ArrayList به دلایل مثل cast و boxing و ... کارایی لازم رو در مقابل generic هارو ندارن. ( توضیحات تکمیلی بارها گفته شده )
    بالاخره همیشه هم ما نمیدونیم چه شیی میخواد توی لیست بشینه . ممکنه در زمان اجرا معلوم بشه محتویات لیست از چه نوعیه. و ما بخوایم برنامه رو خیلی سیال بنویسیم.
    کارایی محدودیت هم داره .

  7. #7
    مدیر بخش آواتار mmd2009
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    پست
    2,393

    نقل قول: استفاده از Generic Type ها بعنوان پارامتر متد

    متاسفانه منظورتون رو متوجه نشدم ! میشه با یک مثال گفته هاتون رو دوباره بگید. اگه منظورتون اینه که نوع های مختلف ممکنه یک پارامتر داشته خب کاربرد T در مثال بالا هم همینه که وابسته به نوع خاصی نیست. شما یک بار int بکن و یک بار String و یک بار ...

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


تاپیک های مشابه

  1. راهنمایی در مورد نحوه استفاده از یک متغیر در یک پارامتر
    نوشته شده توسط tefos666 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 6
    آخرین پست: جمعه 24 اسفند 1386, 16:54 عصر
  2. مشکل در استفاده از DLL و تابع دارای پارامتر از نوع String
    نوشته شده توسط مهدی کرامتی در بخش C#‎‎
    پاسخ: 12
    آخرین پست: یک شنبه 28 بهمن 1386, 00:05 صبح
  3. Generic Type
    نوشته شده توسط roxen13 در بخش برنامه‌نویسی جاوا
    پاسخ: 2
    آخرین پست: چهارشنبه 08 آذر 1385, 23:11 عصر
  4. Generic Types چیست؟
    نوشته شده توسط محمد عرب در بخش VB.NET
    پاسخ: 5
    آخرین پست: پنج شنبه 17 فروردین 1385, 15:18 عصر
  5. پاسخ: 10
    آخرین پست: سه شنبه 13 اردیبهشت 1384, 12:58 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •