جنریک ها (Generics) در سی شارپ

 جنریک ها (Generics) در سی شارپ
فهرست مقاله [نمایش]

     

    Genericها به ما کمک می‌کنند تا بتوانیم کلاس‌ها و یا methodهایی را ایجاد کنیم که هنگام تعریف آن‌ها، تایپشان برایمان مهم نباشد و بتوانیم یک تایپ عمومی برایشان تعریف کنیم و کسی که می‌خواهد از این کلاس یا متدها استفاده کند  تایپ آن را خودش مشخص می‌کند.

    فرض کنید به شما می‌گویند که یک متد بنویسید که دو عدد Integer از ورودی بگیرد و آن دو را با هم جمع کند و نتیجه را به خروجی ارسال کند. این را پیاده‌سازی می‌کنیم. دو int از ورودی می‌گیرد،جمع می کندو یک int هم به خروجی ارسال می‌کند. بعد از مدتی از شما می‌خواهند این کار را برای اعداد اعشاری Float نیز،پیاده‌سازی کنید.حالا چه کاری انجام دهیم؟ همان متد را کپی می‌گیریم، تایپ ورودی را تغییر می‌دهیم و یک متد جدید می‌نویسیم. بعدتر برای Desimall،همین را از ما می‌خواهند. دوباره باید همان متدها را با تایپ Desimall بنویسیم.دو عدد Desimall بگیرد و Desimall را به خروجی ارسال کند و برای تایپ‌های مختلف باید کدمان را تکرار کنیم.

    Genericها برای جلوگیری از تکرار این کدها به کمک ما آمده‌اند. چگونه این کا رو انجام می دهند؟ زمانی که ما یک method برای جمع دو عدد می‌نویسیم، تایپ ورودی‌ها و خروجی را به‌صورت Generic تعریف می‌کنیم و هرکسی که از این methodها استفاده کند تعیین می‌کند که تایپ ورودی و خروجی از چه نوعی باشد. 

    Genericها مختص زبان سی شارپ نیستند و در اکثر زبان‌ها همچنین مواردی را داریم که مانند Genericها عمل می‌کنند. به طور مثال template در زبان C++  بسیار شبیه به Generic ها هستند و همان کارهای Genericها را انجام می‌دهند. البته بین آنها تفاوت‌هایی وجود دارد؛ اما هدف هر دوی آنها مشترک است و در اکثر زبان‌های برنامه‌نویسی همچنین مواردی را داریم.

    مزایای استفاده از Genericها :

    Performance: باعث افزایش Performance برنامه می‌شود و برنامه با سرعت بیشتری اجرا می‌شود.

    چگونه باعث افزایش Performance می‌شود؟زمانی که در زبان سی شارپ یا .Net یک Data type را تعریف می‌کنیم به طور متغیر Integer یا یک کلاس ایجاد می‌کنیم این‌ها دو نوع هستند نوع مقدار(value types) و نوع ارجاع(Reference type)

    Reference typeها روی Heap ذخیره می شوند و value types ها روی stack ذخیره می شوند.

    در .Net ما دو نوع عملیات داریم به نام boxing و Unboxing،زمانی که ما یک value types را به یک Reference type تبدیل می کنیم اینجا عملیات boxing برای ما انجام می گیرد.به طور مثال Integer را به String تبدیل کنیم و عکس این عملیات را Unboxing می گوییم یعنی زمانی که یک Reference type به یک value types تبدیل می شود.در برنامه های ما این دو عملیات به صورت خودکار و توسط .Net انجام می شود و نیاز نیست ما کاری انجام دهیم فقط برای تبدیل Reference type به  value types یک cast نیاز است که انجام دهیم تا در پس زمینه Unboxing برای ما انجام شود.عملیات  boxing و Unboxingیک سر بار دارد.به طور مثال زمانی که آرایه ای دارید که چندین هزار آیتم درون آن قرار دارد و یک Foreach برای پیمایش آن می نویسیم و برای هر آیتم عملیات boxing یا Unboxing را انجام می دهید علاوه بر پردازش اصلی اپلیکیشن یک سر بار با boxing و Unboxing به برنامه اضافه میشود که این باعث کاهش سرعت برنامه می شود.زمانی  که از Generic ها استفاده می کنیم دیگر عملیات boxing و Unboxing  نداریم و این کار باعث افزایش Performance برنامه می شود.

     


    • نویسنده: روشن احمدی

    ارسال دیدگاه

    برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربری‌تان شوید


    دیدگاه کاربران