جنریک ها (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برنامه می شود.

 

جدیدترین ویدئوهای آموزشی

در بخش TV باگتو، آموزش های کوتاه و جدید را مشاهده نمایید

0 نظرات

برای ارسال نظر باید وارد حساب کاربری خود شوید
ورود به حساب کاربری ثبت نام