جنریکها (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 و حرفهای است.