الـأنواع العامة في Visual Basic

نوع العام هو عنصر برمجة مفرد يتكيف لتنفيذ نفس الوظائف لمجموعة متنوعة من أنواع البيانات. عندما تقوم بـتعريف فئة عامة أو إجراء، لا تحتاج الى تعريف إصدار منفصلة لكل نوع من أنواع بيانات التي قد تحتاجها لتنفيذ هذه الوظيفة.

التناظر الوظيفي عبارة عن مجموعة من مفك البراغي مع رؤوس قابلة للإزالة. تقوم بـفحص المسمار الذي تحتاج تشغيلة و تحديد الرأس الصحيح لذلك المسمار (مشقوبة أو خطوط متقاطعة أو starred). بمجرد إدراج الرأس الصحيح في مؤشر screwdriver , قم بتنفيذ نفس الدالة بالضبط مع screwdriver، أي تشغيل ال screw.

مجموعة screwdriver هي أداة عامة

رسم تخطيطي لمفك براغي معين كأداة عامة

عند تعريف نوع عام , تقوم بتحويلها الى نوع ذو معلمات مع أنواع بيانات واحدة أو أكثر. يسمح هذا باستخدام التعليمات البرمجية لتفضيل أنواع البيانات إلى متطلباتها. الـتعليمات البرمجية الخاصة بك يمكن أن تقوم بتعريف عدة عناصر برمجة مختلفة من عنصر عام كلٌ منها تعمل على مجموعة مختلفة من أنواع البيانات. ولكن العناصر المُعلَنة كلها تنفذ المنطق المتطابق, بغض النظر عن ما أنواع البيانات التي تستخدمها.

على سبيل المثال، قد تحتاج إلى إنشاء واستخدام فئة قائمة الانتظار التي تعمل على نوع بيانات محدد مثل String. يمكنك تعريف مثل هذه الفئة من System.Collections.Generic.Queue<T>، كما يظهر المثال التالي.

Public stringQ As New System.Collections.Generic.Queue(Of String)

يمكنك الآن استخدام stringQ للعمل بشكل حصري مع قيم String . لأن stringQ خاصة لـ String بدلاً من كونه معمم لـقيم Object , ليس لديك ربط متأخر أو تحويل نوع. هذا يحفظ وقت التنفيذ ويقلل أخطاء وقت التشغيل.

للحصول على مزيد من المعلومات حول استخدام نوع عام , راجع كيفية القيام بما يلي: استخدام فئة عامة.

مثال على فئة عامة

يوضح المثال التالي تعريف هيكلي لفئة عامة.

Public Class classHolder(Of t)
    Public Sub processNewItem(ByVal newItem As t)
        Dim tempItem As t
        ' Insert code that processes an item of data type t.
    End Sub
End Class

في الهيكل السابق t هو نوع معلمة ، أي، عنصر نائب لنوع بيانات التي تدخلها عندما تقوم بتعريف فئة. في مكان آخر في التعليمات البرمجية الخاصة بك يمكنك تعريف إصدارات مختلفة من classHolder بواسطة توفير أنواع بيانات متعددة لـ t. يوضح المثال التالي تعرفين من ذلك النوع .

Public integerClass As New classHolder(Of Integer)
Friend stringClass As New classHolder(Of String)

الـعبارات السابقة تعلن فئات منشأة ،حيث يحل نوع معين محل معلمة نوع. يتم نشر هذا الاستبدال خلال التعليمات البرمجية داخل الفئة المنشأة. يظهر المثال التالي كيف يبدو إجراء processNewItem في integerClass.

Public Sub processNewItem(ByVal newItem As Integer)
    Dim tempItem As Integer
    ' Inserted code now processes an Integer item.
End Sub

لمثال كامل أكثر ، راجع كيفية القيام بما يلي: تعريف فئة التي يمكن أن توفر وظيفة مماثلة على أنواع بيانات مختلفة.

عناصر البرمجة المؤهلة

يمكنك تعريف واستخدام فئات عامة, بنيات, واجهات, الإجراءات و المفوضين. لاحظ أن .NET Framework يعرّف عدة فئات عامة, بنيات و واجهات التي تمثل عناصر عامة شائعة الاستخدام. مساحة الاسم System.Collections.Generic يوفر قواميس , قوائم, قوائم الانتظار و مكدسات. قبل تعريف العنصر العام الخاص بك, راجع ما إذا كان يتوفر بالفعل في System.Collections.Generic.

الـإجراءات ليست أنواع ولكن يمكنك تعريف و استخدام إجراءات عامة. انظر إجراءات عامة في Visual Basic

مـميزات الأنواع العامة

نوع عام يخدم كأساس للتصريح بالعديد من عناصر برمجة مختلفة , كل منها يعمل على نوع بيانات محددة . البدائل للنوع العام:

  1. نوع مفرد يعمل على نوع بيانات Object .

  2. مجموعة من إصدارات نوع محدد لنوع كل إصدار بشكل فردي يتم برمجتها و تعمل على نوع بيانات واحدة خاصة مثل String, Integer، أو نوع معرف من قبل مستخدم مثل customer.

نوع العام له المميزات التالية متغلبا على هذه البدائل:

  • تأمين النوع الأنواع العامة تفرض التحقق من النوع وقت التحويل البرمجي. أنواع تستند على Object تقبل أي نوع بيانات ،و يجب كتابة تعليمات برمجية للتحقق ما إذا كان نوع البيانات الداخل مقبولاً. مع الأنواع العامة , يمكن للمحول البرمجي التقاط حالات عدم التطابق النوع قبل تشغيل الوقت.

  • الأداء الأنواع العامة لا تحتاج الى box و unbox البيانات، لأن كلٌ منها مخصص لأحد نوع البيانات. التشغيلات التي تعتمد على Object يجب أن box أنواع البيانات الداخلة لتحويلهم الى Object ثم unbox البيانات المقررة للإخراج. تحويل إلى كائن و تحويل إلى نوع القيمة تقلل الأداء.

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

  • توحيد التعليمات البرمجية. التعليمات البرمجية في نوع عام يجب تعريفها مرة واحدة فقط. مجموعة من إصدارات نوع خاص لنوع يجب أن ينسخ نفس التعليمات البرمجية في كل إصدار, مع الاختلاف الوحيد كونه نوع بيانات محدد لذلك الإصدار. مع الأنواع العامة ,كل إصدارات نوع الخاص يتم إنشاؤها من النوع العام الأصلي.

  • إعادة استخدام التعليمات البرمجية . التعليمات البرمجية التي لا تعتمد على نوع بيانات معين يمكن إعادة استخدامها مع أنواع البيانات متنوعة إذا كانت عامة. يمكنك غالبا إعادة استخدامها حتى مع نوع البيانات التي لم تتنبأها أصلا.

  • دعم IDE عند استخدام نوع مكونة معرف من نوع عام , بيئة التطوير المتكاملة (IDE) يمكنها منحك من دعم أكثر بينما تقوم بتطوير التعليمات البرمجية الخاصة بك. على سبيل المثال، IntelliSense™ يُمكنها إظهار خيارات خاصة بالنوع لوسيطة لدالة إنشائية أو أسلوب.

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

الـقيود

على الرغم من أنه يجب أن تكون التعليمات البرمجية في تعريف النوع العام مستقلة النوع بقدر الامكان , قد تحتاج إلى أن تتطلب قدرة معينة لأي نوع البيانات التي تم توفيرها للنوع العام الخاص بك. على سبيل المثال، إذا كنت تريد مقارنة عنصرين من أجل فرز أو ترتيب النسخ ، نوع بيانات الخاصة بهم يجب أن تقوم بتنفيذ واجهة IComparable . يمكنك فرض هذا المتطلب عن طريق إضافة قيد إلى نوع المعلمة.

مثال لقيد

يظهر المثال التالي تعريف هيكل لفئة باستخدام قيد الذي يتطلب وسيطة نوع لتنفيذ IComparable.

Public Class itemManager(Of t As IComparable)
    ' Insert code that defines class members.
End Class

إذا كانت التعليمات البرمجية اللاحقة تحاول إنشاء فئة من itemManager تقوم بتزويد نوع لا يقوم بتطبيق IComparable، المحول البرمجي يرسل إشارات خطأ.

أنواع القيود

يمكن للقيد الخاص بك تحديد المتطلبات التالية في أي مجموعة:

  • وسيطة نوع يجب أن تقوم بتنفيذ واجه واحده أو أكثر

  • يجب أن تكون وسيطة نوع من النوع أو الوراثة من فئة واحدة على الأكثر

  • يجب أن يكشف وسيطة النوع الدالة الإنشائية بدون معلمات قابلة للوصول إلى التعليمات البرمجية التي تنشئ الكائنات منها

  • يجب أن تكون وسيطة النوع نوع المرجع أو يجب أن تكون نوع القيمة

إذا احتجت إلى أن تفرض أكثر من متطلب واحد, استخدم مفصولة بفاصلة قائمة القيد ضمن أقواس ({ }). لطلب مُنشئ قابل للوصول اليه قم باضافة الكلمة الأساسية عامل تشغيل Visual Basic) New) في القائمة. لطلب نوع المرجع قم باضافة الكلمة الأساسية Class ; لطلب نوع القيمة قم باضافة الكلمة الأساسية Structure .

للحصول على المزيد من المعلومات حول القيود راجع نوع القائمة.

مثال لقيود متعددة

يوضح المثال التالي تعريف هيكلي لفئة عامة مع قائمة قيود لمعلمة النوع . في التعليمة البرمجية التي تقوم بإنشاء مثيل من فئة, يجب على وسيطة النوع أن تقوم بتنفيذ كلا الواجهين IComparable و IDisposable ,أن يكون نوع المرجع وكشف على مُنشئ بدون معلمات قابل للوصول اليه .

Public Class thisClass(Of t As {IComparable, IDisposable, Class, New})
    ' Insert code that defines class members.
End Class

شروط هامة

الأنواع العامة توفر وتستخدم المصطلحات التالية:

  • نوع عام. تعريف فئة أو بنية ، واجهة أو الإجراء، أو التفويض التي توفرها على الأقل نوع بيانات واحد عندما تقوم بتعريفه.

  • معلمة نوع . في تعريف نوع عام, عنصر نائب لنوع البيانات الذي توفرة عندما تقوم بتعريف النوع.

  • وسيطة نوع . نوع بيانات محدده التي تقوم باستبدال معلمة نوع عندما تقوم بتعريف نوع مكونة من نوع عام.

  • قيد. الشرط على معلمة نوع التي تقيد وسيطة النوع يمكنك توفيرها له. يمكن أن يتطلب القيد أن وسيطة نوع يجب أن تقوم بتطبيق واجهة معينة, أن تكون أو الوراثة من فئة معينة, يحتوي على الدالة الإنشائية بدون معلمات قابلة للوصول اليها أو أن تكون نوع القيمة أو نوع المرجع. يمكنك جمع هذه القيود لكن يمكنك تحديد فئة واحدة على الأكثر.

  • نوع مكونة. فئة أو بنية ، واجهة ، إجراء أو المفوض المعرفة من نوع عام بواسطة توفير وسيطات نوع من معلمات النوع الخاص به.

راجع أيضًا:

المهام

استكشاف أخطاء أنواع البيانات

المرجع

خلاصة نوع بيانات (Visual Basic)

من عبارة (Visual Basic)

كـ

نوع البيانات كائن

المبادئ

أنواع البيانات في Visual Basic

نوع الأحرف.

موارد أخرى

تطبيق نوع البيانات

نوع التحويلات في Visual Basic

التباين المشترك و Contravariance في (C#و Visual Basic)