Generic در #C
شناسه پست: 2223
بازدید: 750

#C امکانی به نام generic ها را ارائه داده است تا نیاز به cast کردن برای بهبود type safe را حذف نماید و ایجاد کلاسها و متدهای generic را برای ما راحت تر کند.

این مقاله، سرفصلی از دوره آموزشی زیر میباشد:

اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک سطح متوسطه #C کلیک کنید.

برای دانلود سورس مثالها، میتوانید بر روی لینک سورس generic ها در #C کلیک کنید.

ما این مقاله را به قسمتهای زیر تقسیم میکنیم:

Generic Type T

برای ایجاد کلاس generic، باید یک type بین دو علامت کوچکتر و بزرگتر قرار دهیم:

در این مثال، T به عنوان یک placeholder برای type ای که میخواهیم با آن کار کنیم عمل میکند. ما باید این type را زمانیکه این کلاس generic را نمونه سازی میکنیم مشخص نماییم. خب اجازه دهید این را با یک مثال ساده ببینیم:

و برای استفاده از این کلاس generic:

همانطور که در کلاس CollectionInitializer میبینیم، باید  type ای که میخواهیم با آن کار کنیم را تعیین نماییم. سپس میتوانیم متدهای پیاده سازی شده داخل کلاس generic مان را فراخوانی کنیم. البته ما به دلیل سادگی، بررسیهای امنیتی را انجام نداده ایم (اگر عناصر بیشتر از طول آرایه ارسال کنیم و غیره). حالا میتوانیم نتیجه را ببینیم:

مثال Generic در #C

یک کلاس generic، میتواند بیشتر از یک پارامتر type داشته باشد:

محدودیتهای با Generic ها

برخی اوقات، ما میخواهیم اطمینان حاصل کنیم که فقط نوعهای خاصی میتواند با کلاس generic ما فراخوانی شود. این امکان در حالیکه با کلاسها یا اینترفیسها کار میکنیم اغلب میتواند مفید باشد. ما میتوانیم این کار را با استفاده از کلمه where انجام دهیم:

یا ما میتوانیم کلاس generic مان را فقط برای کار با کلاسها محدود کنیم:

انواع مختلفی برای این محدودیتها وجود دارد. آنها به موقعیتهایی که در آن کار میکنیم وابسته هستند. مهم است که بدانیم که اگر ما کلاس generic مان را فقط محدود به کلاسها میکنیم و سپس هنگام استفاده از این کلاس، اگر یک value type ارائه دهیم آنگاه با خطا مواجه خواهیم شد. همچنین اگر میخواهیم فقط با value type ها کار کنیم، آنگاه میتوانیم کلاس generic مان را به این صورت محدود کنیم:

متدهای Generic

به همین ترتیب که میتوانیم یک کلاس generic ایجاد کنیم، یک متد generic نیز میتوانیم ایجاد کنیم. فقط باید یک پارامتر type بین دو علامت کوچکتر و بزرگتر در جلوی نام متد ست کنیم:

اگر متد generic ما داخل یک کلاس generic وجود دارد، آنگاه باید به شناسه پارامتر type توجه کنیم. اگر آن کلاس یک type به نام T دارد، سپس متد ما باید یک نوع متفاوت (U, Y, R…) داشته باشد، در غیر اینصورت T type آن متد، T type کلاس را مخفی میکند.

نتیجه گیری

در این مقاله ما یاد گرفتیم که:

  • چطور از generic ها در #C استفاده کنیم
  • چطور محدودیتها را در کلاسهای generic مان پیاده سازی کنیم
  • چطور متدهای generic ایجاد کنیم

در مقاله بعدی، در مورد Stack،Queue و Hashtable در #C صحبت میکنیم.

نویسنده

امید عباسی
من امید عباسی هستم. سالهاست که در زمینه برنامه نویسی با تکنولوژی دات نت فعالیت میکنم و عاشق این هستم که تجربیات و دانش خودم را در این زمینه با دیگران به اشتراک بزارم. خیلی دوست دارم که نظر و انتقاد خودتون رو در مورد این نوشته برای من بنویسید تا بتونم در آینده، مطالب بهتر و ارزشمندتری را برای شما فراهم کنم. در صورت داشتن هرگونه سوال هم در قسمت دیدگاه ها میتونید با بنده در ارتباط باشید