تعريف المجموعات
المجموعة هي مجموعة من الكائنات المكتوبة بشكل مشابه التي تم تجميعها معاً.
الكائنات من أي نوع يمكن تجميعها في مجموعة واحدة من النوع Object للاستفادة من البنيات المضمّنة في اللغة. على سبيل المثال، تتوقع عبارة C# foreach ( for each في Visual Basic) كافة الكائنات في المجموعة أن تكون من نوع واحد.
ومع ذلك، في مجموعة من النوع Object , معالجة إضافية تتم على العناصر منفردة، مثل التحويل إلى كائن و التحويل إلى نوع القيمة أو تحويلات تؤثر على أداء المجموعة. التحويل إلى كائن و التحويل إلى نوع القيمة عادةً ما يحدث في حالة تخزين أو استرداد نوع قيمة في مجموعة من نوع Object.
مجموعات عامة مثل List<T> ،و المجموعات الخاصة المكتوبة بشدة مثل StringCollection ، تتجنب قفزات الأداء هذه إذا كان نوع العنصر هو النوع المحدد للمجموعة (على سبيل المثال، تخزين أو استرداد سلاسل من StringCollection). بالإضافة إلى ذلك، تنفذ المجموعات المكتوبة بشدة التحقق من النوع تلقائياً لكل عنصر يضاف إلى المجموعة. لهذه الأسباب، نوصي بشدة أن تستخدم مجموعات فئات عامة كلما أمكن.
كل المجموعات التي تنفذ بشكل مباشر أو غير مباشر الواجهة ICollection أو الواجهة العامة ICollection<T> تشارك العديد من الميزات بالإضافة إلى أساليب لإضافة أو إزالة أو البحث في العناصر:
عدّاد.
العدّاد عبارة عن كائن يقوم بالتكرار عبر المجموعة المقترنة به. يمكن اعتباره كمؤشر يمكن نقله إلى أي عنصر في المجموعة. العدّاد يمكن أن يقترن مع مجموعة واحدة فقط و لكن مجموعة واحدة يمكن أن يكون لها عدادات متعددة. عبارة C#foreach (for each في Visual Basic) تستخدم العداد و تخفي تعقيد معالجة العداد.
المزامنةالأعضاء ( System.Collectionsالفئات فقط).
في أنواع المجموعات القديمة في مساحة الاسم System.Collections , المزامنة توفر درجة من الأمان للدوال الخيطية عند الوصول إلى عناصر من المجموعة. المجموعات ليست آمنة للدوال الخيطية بشكل افتراضي. إذا إحتجت وصول متعدد الدوال الخيطية قابل للتوسعة و أكثر كفاءة لمجموعة ، استخدم إحدى الفئات في مساحة الاسم System.Collections.Concurrent. لمزيد من المعلومات، راجع مجموعات مؤشر الترابط الآمن.
فئات قليلة فقط في مساحات الأسماء System.Collections توفر أسلوب تزامن الذي ينشئ المجمّع الآمن للدوال الخيطية عبر المجموعة. عامة ,كافة الفئات في كل مساحات الأسماء System.Collections توفر خاصية SyncRoot التي يمكن استخدامها من قِبل الفئات المشتقة لإنشاء المجمّع الآمن للدوال الخيطية . يتم أيضاً توفير خاصية IsSynchronized لتحديد ما إذا كانت المجموعة آمنة للدوال الخيطية. المزامنة غير متوفرة في الواجهة العامة ICollection<T>.
الأسلوبCopyTo**.**
كافة المجموعات يمكن نسخها إلى صفيف باستخدام الأسلوب CopyTo ; ومع ذلك، ترتيب العناصر في الصفيف جديد يكون بناءاً على التسلسل الذي يرجعهم العداد به. يكون صفيف الناتج دوماً ذو بعد واحد بحد أدنى صفر.
لاحظ أن الواجهة العامة ICollection<T> لديها أعضاء إضافية لا تتضمنها الواجهة الغير عامة.
يتم تنفيذ الميزات التالية في بعض الفئات في مساحات الأسماء System.Collections:
السعة و العد.
سعة المجموعة هي عدد العناصر التي يمكن أن تحتويها. عد المجموعة هو عدد العناصر التي تحتويها بالفعل. BitArray هي حالة خاصة; سعتها هي نفس طولها , و الذي هو نفس عدها. بعض المجموعات تخفي السعة أو العد أو كليهما.
كافة مجموعات توسع سعتها تلقائياً عند الوصول إلى سعتها الحالية. الذاكرة يتم إعادة تخصيصها , ثم يتم نسخ العناصر من المجموعة القديمة إلى الجديدة. وهذا يقلل الإستخدام المطلوبة للمجموعة; ومع ذلك، أداء المجموعة قد لا يزال يتأثر سلبياً. أفضل طريقة لتجنب مستوى الأداء المنخض بسبب تعدد مرات إعادة التخصيص هو تعيين السعة الإبتدائية لتكون الحجم المقدر للمجموعة.
الحد السفلي.
الحد السفلي لمجموعة هو دليل عنصرها الأول. تمت الفهرسة الجميع المجموعات في System.Collectionsمساحات الاسم أن يكون لديك أقل حدود من الصفر. Arrayعلى حد أدنى من الصفر بشكل افتراضي، ولكن يمكن تعريف حد أدنى مختلفة عند إنشاء مثيلصفيفة فئة استخدام CreateInstance.
فئات System.Collections يمكن أن تصنف بشكل عام إلى ثلاثة أنواع:
المجموعات المستخدمة عادةً.
هذه هي التباينات الشائعة لمجموعات البيانات , مثل جداول التجزئة , و قوائم الانتظار , المكدسات , القواميس , و القوائم. العديد من المجموعات شائعة الاستخدام لديها إصدارات غير عامة ,و إصدارات عامة , و إصدارات عامة آمنة للدوال الخيطية.
مجموعات بت.
هذه هي المجموعات التي عناصرها إشارات بت. فإنها تتصرف بشكل مختلف قليلاً عن المجموعات الأخرى.
مجموعات متخصصة.
هذه المجموعات لأغراض محددة جداً ,عادةً لمعالجة نوع معين من العناصر، مثل StringDictionary.
تأكد من اختيار فئة المجموعة بعناية. لأن كل مجموعة لها وظيفة خاصة بها , و لها أيضاً قيود الخاصة بها. كلما زاد تخصص المجموعة , كلما أصبحت محدودة أكثر. للحصول على تلميحات حول اختيار مجموعة , راجع إختيار فئة مجموعة.
راجع أيضًا:
المرجع
System.Collections.Specialized