Generics یکی از ویژگی های قدرتمند برای بسیاری از زبان های برنامه نویسی از جمله C# است. که به شما امکان می دهد کدی بنویسید که می تواند با چندین نوع داده کار کند بدون اینکه نیازی به نوشتن یک نسخه جداگانه از کد برای هر نوع داده باشد. این باعث می شود کد شما انعطاف پذیرتر و قابل استفاده مجدد باشد ، همچنین حجم کدنویسی را کاهش می دهد.
در سی شارپ، جنریک به شما امکان می دهد کلاس یا متدی را تعریف کنید که می تواند با هر نوع داده ای کار کند. این امکان ، انعطاف پذیری و قابلیت استفاده مجدد بیشتر از کد را فراهم می کند. با استفاده از جنریک ، میتوانید کلاسها، اینترفیسها و متدهایی ایجاد کنید که امکان استفاده از آنها را در برنامه ها داشته باشید.
در قطعه کد زیر مثالی از یک کلاس جنریک بای stack را مشاهده میکنید.
public class Stack<T>
{
// The items array is used to store the items in the stack
private T[] items;
// The Push method adds an item to the top of the stack
public void Push(T item)
{
// Code to add the item to the stack
}
// The Pop method removes and returns the top item from the stack
public T Pop()
{
// Code to remove and return the top item from the stack
}
}
در مثال بالا کلاس stack بصورت جنریک با نوع نگهدارنده ی T تعریف شده است. T بدان معناست که هنگام استفاده از نمونه های این کلاس ، می تواند هر نوع داده ای باشد.
متدهای Push و Pop از کلاس Stack برای کار با دادههای نوع T تعریف شدهاند. به این معنی که میتوان آنها را با هر نوع دادهای استفاده کرد، تا زمانی که نوع آن در هنگام استفاده از کلاس مشخص شده باشد.
برای استفاده از این کلاس Stack، نوع داده ای T را که کلاس stack باید در هنگام ایجاد یک نمونه جدید نگه دارد، مشخص کنید. مانند قطعه کد زیر :
Stack<int> stackOfInts = new Stack<int>();
این یک شی Stack جدید ایجاد می کند که می تواند اعداد صحیح را نگه دارد. سپس می توانید از متد های Push و Pop برای افزودن و حذف موارد از پشته برای نوع داده ای int استفاده کنید.
همچنین میتوانید از generic در متد ها استفاده کنید. به مثال زیر توجه کنید.
public void Swap<T>(T[] array, int index1, int index2)
{
T temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
این متد را می توان با هر نوع داده ای استفاده کرد، نوع آن در زمان فراخوانی متد مشخص مکی شود. با توجه به مثال زیر:
int[] arrayOfInts = { 1, 2, 3, 4, 5 };
Swap<int>(arrayOfInts, 0, 1);
مزیت جنریک( generic ) ها این است که به شما اجازه می دهند تا کد های شما حالت safe داشته باشند، به این معنی که نوع داده ای که یک کلاس یا متد می تواند با آن کار کند در زمان کامپایل بررسی می شود. که می تواند به جلوگیری از خطاهای زمان اجرا کمک کند و همچنین کد شما را قابل اعتمادتر و اشکال زدایی را آسان تر می کند.
به طور کلی، جنریک یک ابزار ارزشمند برای نوشتن کد کارآمد و انعطاف پذیر در سی شارپ و سایر زبان های برنامه نویسی می باشد .