۱۴۰۴/۰۷/۰۹
جنریکها (Generics)
۱. Generics چیست؟
- Generics به شما امکان میدهد کلاسها، متدها و interfaceها را با نوع داده مشخص (type-safe) تعریف کنید بدون اینکه نوع داده را ثابت کنید.
- مزیتها:
- Type-safety → جلوگیری از خطاهای نوع داده در زمان کامپایل
- اجتناب از boxing/unboxing → مخصوصاً برای value type
- کد قابل استفاده مجدد → یک کلاس/متد برای هر نوع داده قابل استفاده است
۱.۱ مثال با کلاس Generics
class MyGeneric<T>
{
public T Data { get; set; }
}
class Program
{
static void Main()
{
MyGeneric<int> intObj = new MyGeneric<int>();
intObj.Data = 100;
Console.WriteLine(intObj.Data); // خروجی: 100
MyGeneric<string> strObj = new MyGeneric<string>();
strObj.Data = "Hello Generics";
Console.WriteLine(strObj.Data); // خروجی: Hello Generics
}
}
نکته: با
<T>نوع داده در زمان کامپایل مشخص میشود و type-safe است.
۲. Generics و Collections
۲.۱ تفاوت List<T> و ArrayList
ArrayList→ non-generic, همه چیز را بهobjectتبدیل میکند (boxing/unboxing برای value type)List<T>→ generic, فقط نوع داده مشخص را قبول میکند، سریعتر و امنتر
مثال:
ArrayList arr = new ArrayList();
arr.Add(10); // boxing اتفاق میافتد
int x = (int)arr[0]; // unboxing
List<int> list = new List<int>();
list.Add(10); // بدون boxing
int y = list[0]; // مستقیم و type-safe
نتیجه:
List<int>هم سریعتر است و هم از خطاهای نوع داده جلوگیری میکند.
۳. Generics در متدها
- میتوان متدهای generic هم تعریف کرد:
static T Echo<T>(T input)
{
return input;
}
Console.WriteLine(Echo<int>(123)); // خروجی: 123
Console.WriteLine(Echo<string>("Hi")); // خروجی: Hi
نکته: این متد برای هر نوع داده قابل استفاده است و type-safe است.
۴. جمعبندی نکات مهم آزمونی
| نکته | توضیح |
|---|---|
| Generics | تعریف کلاس/متد/interface با نوع داده مشخص |
| Type-safety | خطاهای نوع داده در زمان کامپایل شناسایی میشوند |
| Boxing/Unboxing | برای value type نیازی به boxing نیست → سریعتر |
| List<T> vs ArrayList | List<T> امنتر و سریعتر است |
| متد Generics | یک متد میتواند با هر نوع داده فراخوانی شود |
✅ نکات تستی معمول:
- چرا List<T> بهتر از ArrayList است؟
- چه مزایای Type-safe بودن دارد؟
- مثال کوتاه از متد generic یا کلاس generic
Accept Cookies
[your-shortcode]