إجراءات عامة في Visual Basic

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

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

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

استنتاج النوع

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

Public Sub testSub(Of t)(ByVal arg As t)
End Sub
Public Sub callTestSub()
    testSub("Use this string")
End Sub

إذا كان المحول البرمجي لا يمكنه استدلال وسيطات النوع من سياق الاستدعاء الخاص بك, فإنه يُعلن عن خطأ. أحد الأسباب المحتملة لمثل هذا الخطأ عدم تطابق رتبة في صفيف. على سبيل المثال، افترض تعريف معلمة عادية كصفيف معلمة نوع. إذا تم استدعاء الإجراء العام يقوم بتزويد صفيف لرتبة مختلفة (عدد الأبعاد) ، يتسبب عدم التطابق فشل استدلال النوع . تـظهر التعليمات البرمجية التالية استدعاء حيث يتم تمرير صفيف ثنائي الأبعاد إلى إجراء يتوقع صفيف أحادي الأبعاد.

Public Sub demoSub(Of t)(ByVal arg() As t)

End Sub

Public Sub callDemoSub()

Dim twoDimensions(,) As Integer

demoSub(twoDimensions)

End Sub

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

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

المثال

الوصف

يعرف المثال التالي إجراء Function عام للعثور على عنصر معين في صفيف. تعرف معلمة نوع واحدة و يستخدمها لبناء المعلمتين في قائمة المعلمات.

الرمز

Public Function findElement(Of T As IComparable) (
        ByVal searchArray As T(), ByVal searchValue As T) As Integer

    If searchArray.GetLength(0) > 0 Then
        For i As Integer = 0 To searchArray.GetUpperBound(0)
            If searchArray(i).CompareTo(searchValue) = 0 Then Return i
        Next i
    End If

    Return -1
End Function

التعليقات

يتطلب المثال السابق القدرة لمقارنة searchValue مقابل كل عنصر من searchArray. لـتضمن هذه الإمكانية, فإنه يقيد معلمة النوع T لتطبيق IComparable<T> الواجهة. تستخدم التعليمات البرمجية أسلوب CompareTo بدلاً من عامل التشغيل = لأنه ليس هناك أي ضمان أن وسيطة نوع المتوفرة بالنسبة T يساند عامل التشغيل =.

يمكنك اختبار اجراء findElement مع التعليمات البرمجية التالية.

Public Sub tryFindElement()
    Dim stringArray() As String = {"abc", "def", "xyz"}
    Dim stringSearch As String = "abc"
    Dim integerArray() As Integer = {7, 8, 9}
    Dim integerSearch As Integer = 8
    Dim dateArray() As Date = {#4/17/1969#, #9/20/1998#, #5/31/2004#}
    Dim dateSearch As Date = Microsoft.VisualBasic.DateAndTime.Today
    MsgBox(CStr(findElement(Of String)(stringArray, stringSearch)))
    MsgBox(CStr(findElement(Of Integer)(integerArray, integerSearch)))
    MsgBox(CStr(findElement(Of Date)(dateArray, dateSearch)))
End Sub

الاستدعاءات السابقة لـ MsgBox تعرض "0" و "1" و "-1" على التوالي.

راجع أيضًا:

المهام

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

كيفية القيام بما يلي: استخدام فئة عامة

المرجع

نوع القائمة

قائمة المعلمة

المبادئ

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

الـإجراءات في Visual Basic

معلمات إجراء و وسيطات