الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شرح Generic Data Type وكيفية الاستفادة منها

بدأه akramKamal في 4 أبريل 2009 · 1 رد · 2,682 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

هذا الموضوع لتوضيح كيفية عمل generic data type:

أحيانا تحتاج للتعامل مع أي نوع من المتغيرات مثل تخزين البيانات , فكان الحل التقليدي لذلك هو أن تتعامل مع المتغير object فهو يقبل أي نوع من البيانات

ولكن الان اصبح بامكانك أن تتعامل مع متغيرات على حسب ما يريد المستخدم أو المطور

مثال على ذلك في الميثود

class Program
	{
		static void Main(string[] args)
		{
			object x = "Hello";
		string result = GetObject<string>(x);//  لاحظ انT  هي string
			Console.WriteLine(result);
		}
	   static T GetObject<T>(object obj) //  لاحظ صيغة التعريف لذلك
		{
			return (T)obj;
		}
	}

مثال على ذلك في الكلاس

class Program
	{
		static void Main(string[] args)
		{
			//  لاحظ ان T  هي char
			GroupItem<char> group = new GroupItem<char>();
			group.AddItem('A');
			group.AddItem('B');
			group.AddItem('C');
		}

	}
	public class GroupItem<T>//  لاحظ صيغة التعريف لذلك
	{
		private List<T> Items = new List<T>();
		/// <summary>
		/// return the name at this index
		/// </summary>
		public T this[int index]
		{
			get { return Items[index]; }
			set { Items[index] = value; }
		}
		/// <summary>
		/// return the index of this name
		/// </summary>
		public int this[T Item]
		{
			get { return Items.IndexOf(Item); }
		}
		public void AddItem(T Item)
		{
			Items.Add(Item);
		}
	}

استخدام هذه الطريقة يحتم علينا معرفة الكلمة المحجوزة default وتستخدم هذه الكلمة لايجاد القيمة البديهية للنوع المحدد

مثلا للنوع intتكون0 و للنوع double تكون 0.0 وللأنواع ذات القيم المرجعية يكون null

لذلك حينما نستخدم نوع لسنا نعرفه بعد ونحتاج لمعرفة القيمة البديهية لهذا النوع فما علينا إلا أن نكتب الكود التالي

public T this[int index]
			{
				get
				{
				if (index > Items.Count|| index<0) return default(T);
				   else  return Items[index];
				}
				set { Items[index] = value; }
			}

يوضح هذا المثال احتمال أن يدخل المستخدم index غير موجود فإننا سنقوم بإرجاع القيمة البديهية لهذا النوع

تحديد وتقييد generic data type:

قد تريد من المستخدم أن لا يدخل أي داتا تايب إلا أن تخضع لعدة شروط مثلا أن تكون لها default constructor أو أنها ترث من IDrawable أو أي شرط أخر

فما عليك ألا أن تقوم بتحديد هذه الشروط عند بناءك للكلاس وبالمثال يتضح المقال

الكود الأول

class Program
	{
		static void Main(string[] args)
		{
			GroupItem<MyClass> group = new GroupItem<MyClass>();
		}
		public class GroupItem<T> where T : new()//لاحظ الشرط المحدد
		{

		}
		public class MyClass
		{

		}
	}

الكود الثاني :

class Program
	{
		static void Main(string[] args)
		{
			GroupItem<MyClass> group = new GroupItem<MyClass>();
		}
		public class GroupItem<T> where T : new()
		{

		}
		public class MyClass
		{
			public MyClass(int x)
			{
			}
		}}

سنلاحظ أن الكود الثاني يعاني من الأخطاء وذلك لأننا وضعنا شرط أن يحتوي الكلاس على default constructor وذلك في الجملة where T : new()

جملة التحديد****************************المعنى لها

where T : new()*********************يجب أن يكون له T default constructor

where T : class ********************يجب أن يكون T من نوع reference pass by

where T : struct ********************يجب أن يكون T من نوع pass by value

where T : <Name of base class>*******تحديد اسم ال base مباشرة

مثال أخر

class Program
	{
		static void Main(string[] args)
		{
			GroupItem<int> group = new GroupItem<int>();
		}
		public class GroupItem<T> where T : struct
		{

		}
	}

تم تعديل هذه المشاركة بواسطة akramKamal في 4 أبريل 2009 في 18:32

قولوا لا اله الا الله تفلحوا

ومن يبتغي غير الاسلام دينا فلن يقبل منه وهو في الاخرة من الخاسرين- صدق الله العظيم

#2

يعطيك العافية اخي الكريم،

بارك الله فيك

دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب

حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .

الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية

الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير

مواضيع مشابهة