۱۴۰۴/۰۷/۰۹ Nebular

جنریک‌ها (Generics)

۱. Generics چیست؟

  • Generics به شما امکان می‌دهد کلاس‌ها، متدها و interfaceها را با نوع داده مشخص (type-safe) تعریف کنید بدون اینکه نوع داده را ثابت کنید.
  • مزیت‌ها:
    1. Type-safety → جلوگیری از خطاهای نوع داده در زمان کامپایل
    2. اجتناب از boxing/unboxing → مخصوصاً برای value type
    3. کد قابل استفاده مجدد → یک کلاس/متد برای هر نوع داده قابل استفاده است

۱.۱ مثال با کلاس 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

  • ArrayListnon-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 ArrayListList<T> امن‌تر و سریع‌تر است
متد Genericsیک متد می‌تواند با هر نوع داده فراخوانی شود

نکات تستی معمول:

  1. چرا List<T> بهتر از ArrayList است؟
  2. چه مزایای Type-safe بودن دارد؟
  3. مثال کوتاه از متد generic یا کلاس generic
Accept Cookies
Accept Cookies
[your-shortcode]