جنریک‌ها (Generics) در C#

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

Generics چیست؟

Generics یک قابلیت در C# است که نوع داده را به صورت پارامتری تعریف می‌کند و باعث افزایش type safety و reuse در کد می‌شود.

مشکل قبل از Generics


public class IntBox
{
    public int Value { get; set; }
}

public class StringBox
{
    public string Value { get; set; }
}

در این حالت مجبوریم برای هر نوع داده یک کلاس جدا بسازیم.

راه‌حل با Generics


public class Box
{
    public T Value { get; set; }
}

استفاده از Generic Class


Box intBox = new Box();
intBox.Value = 10;

Box stringBox = new Box();
stringBox.Value = "Hello";

Generic Method


public T GetDefaultValue()
{
    return default(T);
}

var intDefault = GetDefaultValue();
var stringDefault = GetDefaultValue();

Generic در Collections

اکثر کالکشن‌های C# از Generics استفاده می‌کنند.


List numbers = new List { 1, 2, 3 };

Dictionary users = new Dictionary();
users.Add(1, "Ali");
users.Add(2, "Sara");

Constraints در Generics

می‌توان محدودیت برای نوع داده تعریف کرد.


public class Repository where T : class
{
    public void Add(T entity)
    {
        // save entity
    }
}

انواع Constraints

  • where T : class → فقط reference types
  • where T : struct → فقط value types
  • where T : new() → باید constructor بدون پارامتر داشته باشد
  • where T : BaseClass → محدود به یک کلاس خاص

مثال واقعی در پروژه


public interface IRepository
{
    void Add(T entity);
    T Get(int id);
}

جمع‌بندی

Generics یکی از مهم‌ترین قابلیت‌های C# برای نوشتن کد قابل استفاده مجدد، type-safe و حرفه‌ای است.