السلام عليكم و رحمة الله و بركاته
في هذا الموضوع سأتحدث عن تقنية الـ Generics أخوتي الكرام مع مثال بسيط و عملي .. فما هي الـ Generics إذا :
هي تقنية أضيفت إلى الـ CLR تتيح لك تحديد بعض خصائص Class بدلاً من تحديد الـ Class الذي تريد استخدامه, فمثلاً يمكنك استخدام الـ Generics عندما تريد أن تكتب دالة فيها بارامتر من Class يحقق الـ (Interface IDbCommand) بدلاً من أن تكتب أكثر من دالة لكل Class يحقق تلك الـ Interface, أو تريد أن تضع قيود على كلاس أغراض لائحة Class List<T> بحيث يكون نوع عناصر هذه الـ List يرث من Base Class و يحقق عدد من الـ Interfaces مثلاً بما يتناسب مع الـ Business Logic خاصتك.
و فيما يلي مثال على استخدام هذه التقنية الرائعة و المثيرة لمطوري الـ .Net :
إفتح مشروع Console و ابدأ كتابة الأكواد اللاحقة بعد نهاية الـ Program Class ...
ليكن لدينا الـ Interface التالية :
public interface IDataObject
{
void Save();
void Delete();
}و ليكن هناك كلاس Student يحقق الـ Interface السابقة الذكر:
public class Student : IDataObject
{
public int Id { get; set; }
public String Name { get; set; }
public DateTime BirthDate { get; set; }
#region IDataObject Implementation
public void Save()
{
Console.Write(String.Format("Saving the student:{0} to database", Name));
Console.ReadKey(true);
}
public void Delete()
{
Console.Write(String.Format("Deleting the student:{0} from database", Name));
Console.ReadKey(true);
}
#endregion
}
الآن سنستخدم تقنية الـ Generics لنحدد بعض صفات كلاس عناصر الـ List بدلاً من تحديد الكلاس نفسه (Student) و ذلك لكي تستطيع الـ List أن تتعامل مع أي كلاس يحقق IDataObject Interface و ليس حصرا الـ Student Class
public class MyBindingList<T> : BindingList<T> where T : IDataObject
{
public void DeleteAll()
{
// here I call the Delete method because
//every element in the list implement IDataObject
foreach (var item in this.Items) item.Delete();
}
public void SaveAll()
{
// here I call the Delete method because
//every element in the list implement IDataObject
foreach (var item in this.Items) item.Save();
}
}
لنعد الأن إلى دالة الـ Main في Class Program و نعدلها إلى الشكل التالي:
static void Main()
{
MyBindingList<Student> listStudents = new MyBindingList<Student>();
listStudents.Add(new Student { Name = "Ahmad"});
listStudents.Add(new Student { Name = "Samer"});
listStudents.SaveAll();
listStudents.DeleteAll();
}نفذ المشروع و تمتع بمشاهدة النتيجة :)
أرجو الفائدة للجميع