آموزش جنریک ها (Generics) در سی شارپ

Generics به ما اجازه می دهند کلاس‌هایی را تعریف کنیم که نوع داده ای فیلدها، پارامتر ها و متد هایشان در زمان استفاده از آنها تعیین شوند.

آموزش جنریک ها (Generics) در سی شارپ

Generics در زبان سی شارپ

Generic به معنای شکل کلی است، نه خاص. در سی شارپ، عمومی به معنای خاص نبودن برای یک نوع داده خاص است.

سی شارپ به شما اجازه می دهد تا کلاس های generic، رابط ها، کلاس های انتزاعی، فیلدها، متدها، متدهای استاتیک، ویژگی ها، events ، delegates و عملگرها را با استفاده از نوع پارامتر (type parameter) و بدون نوع داده خاص تعریف کنید. نوع parameter یک نگهدارنده برای یک نوع خاص است که هنگام ایجاد یک نمونه از نوع generic مشخص شده است.

یک نوع generic با تعیین یک نوع پارامتر در یک براکت پس از یک نام ، به عنوان مثال، <TypeName<T تعریف می شود که در آن T یک Type است.

Generics in C#

Generic Class

generic class ها کلاس هایی هستند که نوع داده آن ها مشخص و از پیش تعریف شده نیستند و در زمان استفاده از آن ها تعیین می شوند. ما معمولا تا الان کلاس هایی را تعریف می کردیم و در هر کدام از کلاس ها صفت ها و متدهایی تعریف می کردیم و روی نوع داده های مخصوصی که نیاز داشتیم کار می کردیم، یعنی براساس نیاز ، یک کلاس تعریف می کردیم و با نوع داده خاصی کار می کردیم. در این بخش از آموزش زبان برنامه نویسی سی شارپ، یاد می گیریم کلاس هایی تعریف کنیم که در لحظه تعریف نوع داده ی کلاس مشخص نیست و در لحظه استفاده از کلاس نوع داده آن را مشخص می کنیم، به این نوع کلاس ها generic class گفته می شوند. به عبارت دیگر، generic به شما امکان می دهد یک کلاس یا متد بنویسید که بتواند با هر نوع داده ای کار کند.

کلاس های عمومی یا generic با استفاده از نوع پارامتر در یک جفت براکت زاویه دار بعد از نام کلاس تعریف می شوند. در ادامه یک کلاس generic تعریف شده است.

Generics در زبان سی شارپ

در بالا، DataStore یک کلاس generic است. T نوع پارامتر نامیده می شود ، که می تواند به عنوان یک نوع از فیلدها، ویژگی ها، پارامترهای متد، انواع بازگشتی و delegate ها در کلاس DataStore استفاده شود. به عنوان مثال، Data یک ویژگی generic است زیرا ما از یک T به عنوان نوع این ویژگی به جای نوع داده خاص استفاده کرده ایم.

نکته:

استفاده از T به عنوان نوع پارامتر الزامی نیست. شما می توانید هر نامی را به نوع پارامتر بدهید. به طور کلی، T زمانی استفاده می شود که تنها یک نوع پارامتر وجود داشته باشد. توصیه می شود از یک نام قابل خواندن تر بر اساس نیاز استفاده کنید مانند TSession، TKey، TValue و غیره.

همچنین می توانید نوع پارامترهای چندگانه را که با کاما از هم جدا شده اند تعریف کنید.

Generics

نمونه سازی کلاس Generic

می توانید با تعیین نوع واقعی در براکت ها، نمونه ای از کلاس های عمومی ایجاد کنید. شکل زیر یک نمونه از کلاس عمومی DataStore ایجاد می کند.

نمونه سازی کلاس Generic

در بالا، هنگام ایجاد یک نمونه، نوع رشته را در براکت ها تعیین کردیم. بنابراین، هر جا که T در کل کلاس در زمان کامپایل استفاده شود، T با یک نوع رشته جایگزین می شود. بنابراین، نوع ویژگی Data رشته خواهد بود.

شکل زیر نحوه عملکرد generics را نشان می دهد.

نمونه سازی کلاس Generic

می توانید یک مقدار رشته ای را به ویژگی Data اختصاص دهید. تلاش برای اختصاص مقادیری غیر از رشته منجر به خطای زمان کامپایل می شود.

Generics in C#

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

Generics in C#
خروجی قطعه کد بالا به صورت زیر است.

Hello World!
100
100, Hundred
IT, Information Technology

ویژگی های کلاس Generic

1- یک کلاس generic قابلیت استفاده مجدد را افزایش می دهد. هر چه نوع پارامترها بیشتر می شود به این معنی است که قابل استفاده مجددتر می شود. با این حال، تعمیم بیش از حد، درک و نگهداری کد را دشوار می کند.

2- یک کلاس generic می تواند یک کلاس پایه برای سایر کلاس های generic یا non-generic یا کلاس های انتزاعی (abstract) باشد.

3- یک کلاس generic می تواند از سایر رابط های generic یا non-generic ، کلاس ها یا کلاس های abstract مشتق شود.

فیلدهای Generic

یک کلاس generic می تواند شامل فیلدهای generic باشد. با این حال، نمی توان آن را مقداردهی اولیه کرد.

فیلدهای Generic

آنچه که در زیر نشان داده شده است تعریف یک آرایه generic می باشد.

Generic fields

متدهای Generic

متدی که با نوع پارامترها برای نوع برگشتی یا پارامترها تعریف شده باشد، متد generic نامیده می شود.

متدهای Generic

در بالا، متدهای ()AddorUpdate و ()GetData متدهای generic هستند. نوع داده واقعی پارامتر آیتم در زمان نمونه سازی کلاس <DataStore<T، همانطور که در زیر نشان داده شده است، مشخص می شود.

Generic methods

خروجی قطعه کد بالا عدد 50 است.

نوع پارامتر generic را می توان با پارامترهای متعدد با یا بدون پارامترهای non-generic و نوع بازگشتی استفاده کرد. موارد زیر valid generic method overloading هستند.

Generics methods in C#

یک کلاس non-generic می تواند با تعیین یک نوع پارامتر در براکت با نام متد، مانند شکل زیر، متدهای generic را شامل شود.

Generics methods in C#
خروجی قطعه کد بالا به صورت زیر است.
100
200
Hello
World!

مزایای Generics

1- Generics قابلیت استفاده مجدد کد را افزایش می دهد. برای مدیریت انواع مختلف داده نیازی به نوشتن کد ندارید.

2- Generics از نظر نوع ایمن هستند. اگر بخواهید از نوع داده ای متفاوت از نوع مشخص شده در تعریف استفاده کنید، با خطاهای زمان کامپایل مواجه می شوید.

3- Generic یک مزیت از لحاظ عملکرد دارد زیرا امکان boxing و unboxing را حذف می کند.

Generics در زبان سی شارپ Generic Class Generic Method

مقالات این دسته بندی