مشاركة عبر


المزايا و القيود للعام

بالسماح لك بتحديد الأنواع التي يتم تصنيفها تحت الفئة أو الأسلوب العام، فستنقل الميزة العامة عبء أمان النوع من عليك إلي المحول البرمجي. لا توجد حاجة لكتابة التعليمات البرمجية للاختبار على نوع البيانات الصحيح لأن يتم تعيينه قسراً في وقت التحويل البرمجي. وتقل الحاجة إلى تحويل النوع و تقل إمكانية حدوث أخطاء وقت التشغيل.

يوفر العام أمان النوع بدون التحميل الزائد علي التطبيقات المتعددة. على سبيل المثال، يمكنك إنشاء قائمة مرتبطة من السلاسل بواسطة تعريف المتغير التالي:

Dim llist As New LinkedList(Of String)
LinkedList<string> llist = new LinkedList<string>();
LinkedList<String^>^ llist = gcnew LinkedList<String^>();

لا توجد حاجة إلي التوريث من النوع الأساسي وتجاوز الأعضاء. القائمة المرتبطة تكون جاهزة للاستخدام الفوري. راجع System.Collections.Generic و System.Collections.ObjectModel لأنواع مجموعات العام المتوفرة بواسطة .NET Framework.

بالإضافة إلى أمان النوع، فأنواع المجموعة العامة تنفذ بشكل أفضل التخزين والتعامل مع قيمة الأنواع لأنه ليس هناك حاجة لإغلاق قيم الأنواع.

يقوم المفوضين العام بتمكين عمليات الاسترجاعات لنوع - الآمن دون الحاجة إلى إنشاء فئات تفويض متعددة. على سبيل المثال، يسمح لك المفوض العام Predicate<T> بإنشاء أسلوب يقوم بتنفيذ معايير البحث الخاصة بك لنوع معين و استخدام الأسلوب الخاص بك مع الأساليب ذات النوع Array مثل Find<T> ، FindLast<T> ، و FindAll<T>.

يمكن استخدام التفويضات العامة في التعليمات البرمجية المنشأة بشكل حيوي دون الحاجة إلى إنشاء نوع مفوض . يؤدي ذلك إلى زيادة عدد من وحدات السيناريو التي يمكنك بواسطتها استخدام الأساليب الخفيفة بشكل حيوي بدلاً من إنشاء تجميعات بأكملها. للمزيد من المعلومات، راجع كيفية: لتعريف ثم تنفيذ أساليب ديناميكي وDynamicMethod.

في كثير من الحالات، يمكن للمحول البرمجي لـ Visual Basic و Visual C++و C# أن يقوم بتحديد الأنواع المستخدمة من السياق بواسطة أستدعاء أسلوب عام، والذي يبسط بناء الجملة بشكل كبير من أجل استخدام الأساليب العامة. على سبيل المثال، تعرض التعليمة البرمجية التالية النماذج الطويلة والقصيرة لاستدعاء الأسلوب العام BinarySearch للبحث في صفيف من السلاسل. في النموذج المختصر، يقوم المحول البرمجي بالاستدلال عن معلمة النوع الصحيحة من أنواع وسائط الأسلوب.

Dim index As Integer = Array.BinarySearch(myArray, "test string")
Dim index As Integer = _
    Array.BinarySearch(Of String)(myArray, "test string")
int index = Array.BinarySearch(myArray, "test string");
int index = Array.BinarySearch<string>(myArray, "test string");
int index = Array::BinarySearch(myArray, "test string");
int index = Array::BinarySearch<String^>(myArray, "test string");

قيود العام

فيما يلي بعض القيود العام في NET Framework. الإصدار 2.0:

  • يمكن أن يتم اشتقاق الأنواع العامة من معظم الفئات الأساسية مثل MarshalByRefObject (ويمكن استخدام القيود لتطلب اشتقاق معلمات النوع العام من فئات أساسية مثل MarshalByRefObject). على الرغم من ذلك، فهذا الإصدار من .NET Framework لا يدعم الأنواع العامة المرتبطة بالسياق. النوع العام يمكن اشتقاقه من ContextBoundObject ، ولكن محاولة إنشاء مثيل لهذا النوع تتسبب TypeLoadException.

  • لا يمكن أن تمتلك التعدادات معلمات نوع عام. يمكن للتعداد أن يكون عام كمؤشر فقط في حاله حدوث خاطء (على سبيل المثال، بسبب التداخل في النوع العام يتم تعريفه باستخدام Visual Basic أو C# أو C++). لمزيد من المعلومات، راجع "التعدادات" في نظام نوع شائع.

  • الأساليب الخفيفة في التحميل والحيوية لا يمكن ان تكون عامة لمزيد من المعلومات حول الأساليب الحيوية ، راجع حذف الانعكاس سيناريوهات أسلوب ديناميكي.

  • في Visual Basic و C# و C++ ، النوع المتداخل الذي تم تضمينه في النوع العام لا يمكن إنشاء مثيل له إلا إذا تم تعيين أنواع تم تعيينها لمعلمات النوع من كافة الأنواع المضمَّنة. هناك طريقة أخرى تفيد بأن في الانعكاس، النوع المتداخل الذي تم تعريفه باستخدام هذه اللغات يتضمن معلمات نوع لكل الأنواع المضمنة به. يسمح هذا لمعلمات النوع بتضمين انواع لكي يتم استخدامها في تعريفات العضو من النوع المتداخل. للحصول على مزيد من المعلومات، انظر "الأنواع المتداخلة" في MakeGenericType.

    ملاحظةملاحظة

    النوع المتداخل الذي تم تعريفه بواسطة تعليمات برمجية باعثة في تجميع حيوي أو بواسطة استخدام Ilasm.exe ( المجمع MSIL)، غير مطلوب منه تضمين معلمات نوع لكل الأنواع المُضمنة الخاصة به; ومع ذلك، إذا لم يتضمنهم، فمعلمات النوع ليست في نطاق الفئات المتداخلة.

    للحصول على مزيد من المعلومات، انظر "الأنواع المتداخلة" في MakeGenericType.

راجع أيضًا:

المرجع

System.Collections.Generic

System.Collections.ObjectModel

المبادئ

المجموعات العامة في .NET Framework

المفوضون العوام لمعالجة الصفائف و القوائم

الواجهات العامة

موارد أخرى

المكونات العامة في .NET Framework