لماذا Generics؟
كود يعمل مع أي نوع مع أمان النوع وقت الترجمة. رأيتها بالفعل: List<T> و Dictionary<K,V>.
صنف عام
class Box<T>
{
private T value;
public void Set(T value) => this.value = value;
public T Get() => value;
}
الاستخدام:
var b1 = new Box<string>();
b1.Set("مرحبًا");
string s = b1.Get(); // بلا تحويل
var b2 = new Box<int>();
b2.Set(42);
دالة عامّة
T Max<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b) > 0 ? a : b;
}
Max(3, 9); // 9
Max("ا", "ب");
القيود (Constraints)
where T : class // نوع مرجعي
where T : struct // نوع قيمي
where T : new() // له مُنشئ فارغ
where T : IComparable // ينفّذ واجهة
الفائدة
- أمان النوع: الخطأ يُكشف وقت الترجمة.
- إعادة الاستخدام بلا تكرار.
- أداء أفضل: بلا boxing للأنواع القيمية.
🎯 التالي: استعلامات LINQ.