فهم الـ Generics في C#
تتيح لك الـ Generics كتابة الكود مرة واحدة واستخدامه مع أي نوع — أكثر قابلية لإعادة الاستخدام وأكثر إيجازًا وأمانًا من تمرير كل شيء عبر object.
تتيح لك الـ Generics كتابة كود يعمل مع أي نوع بيانات مع بقائه آمنًا تمامًا من ناحية الأنواع (type-safe). فبدل تكرار دالة لكل نوع — أو تحويل كل شيء عبر object والأمل في الأفضل — تكتبها مرة واحدة مع type parameter. وتعلن هذا الـ parameter بأقواس زاوية: <T>.
دالة generic
هذه دالة تطبع قيمة من أي نوع:
public static void Print<T>(T value)
{
Console.WriteLine(value);
}وهي تعمل مع أي شيء تمرره إليها:
Print(10); // 10
Print("Hello, world!"); // Hello, world!الـ Generic classes
الفكرة نفسها تتسع إلى كلاسات كاملة. يعلن الـ generic class عن type parameter بعد اسم الكلاس — وT مجرد اصطلاح؛ أي اسم يصلح.
public class Box<T>
{
private T item;
public void Put(T value) => item = value;
public T Get() => item;
}لماذا نهتم
إعادة الاستخدام — تنفيذ واحد يخدم كل الأنواع. الإيجاز — كود مكرر أقل. الأداء — لا boxing ولا casting عند التعامل مع الـ value types. الأمان — يفرض المترجم (compiler) النوع الصحيح، فتختفي فئة كاملة من أخطاء وقت التشغيل.
أنت تستخدمها بالفعل
معظم collections في .NET هي generic: List<T> (قائمة قابلة لتغيير الحجم)، وDictionary<TKey, TValue> (أزواج اسم/قيمة)، وQueue<T> (FIFO)، وStack<T> (LIFO)، وComparer<T>. في كل مرة تكتب List<string> فأنت تستخدم الـ generics.
الـ Generics من أهم ميزات C#. سواء في دالة أو كلاس، فهي الطريقة التي تكتب بها كودًا مرنًا وقابلًا لإعادة الاستخدام دون التخلي عن شبكة أمان المترجم.
بقلم فادي إيهاب عامر
راسلني على واتسابتابع القراءة
التصميم بالثيمات دون خطوة بناء: كيف يستخدم NYX الدالة color-mix()
بنيت NYX، إطار مكونات بلا أي اعتماديات، بحيث يمكن إعادة ضبط ثيم كامل من حفنة custom properties — بلا Sass ولا إعادة تجميع، مباشرة في المتصفح.
ما علّمني إياه بناء OTP Input عن المكونات المتحكَّم بها
التقدم التلقائي واللصق والـ backspace تبدو بسيطة حتى تبنيها — إليك دروس الـ controlled input التي ترافقني في كل نموذج أشحنه.