في (معدّل عام) في (Visual Basic)

للحصول على معلمة نوع عام, تحدد الكلمة الأساسية In وهو معلمة من نوع contravariant.

ملاحظات

Contravariance يتيح لك استخدام نوع مشتقة أقل مما هو محدد بواسطة معلمة عامة. وهذا يسمح للتحويل الضمني للفئات التي تنفذ واجهات متغير والتحويل الضمني لأنواع المفوض.

لمزيد من المعلومات، راجع التباين المشترك و Contravariance في (C#و Visual Basic).

القواعد

يمكنك استخدام الكلمة الأساسية In في الواجهات العامة و المفوضين.

يمكن إعلان من نوع contravariant في واجهة عامة أو مندوب إذا كان يستخدم فقط كنوع من وسائط الأسلوب ولا يستخدم كنوع إرجاع أسلوب. معلمات ByRef لا يمكن أن تكون طردي أو contravariant.

التباين و contravariance يكون مدعوماً لأنواع المرجع و لا يتم دعمه لأنواع القيمة.

في Visual Basic يتعذر تعريف الأحداث في الواجهات متغير بدون تعيين نوع التفويض. أيضاً، لا يمكن أن تتداخل واجهة متغير فئات أو تتضمن التعدادات بنيات إلا أنه يمكن أن تتداخل الواجهات.

السلوك

وتتيح الواجهة التي تحتوي على نوع contravariant معلمات تسمح للأساليب بقبول حجج بأنواع اقل اشتقاقاً من تلك المحددة بواسطة معلمة نوع الواجهة. على سبيل المثال, لأنه في ".NET Framework 4،" في الواجهة IComparer<T> ، هو نوع T contravariant ، يمكنك تعيين أي كائن من نوع IComparer(Of Person) إلى كائن من نوع IComparer(Of Employee) دون استخدام أية أساليب التحويل الخاصة إذا Person يرث Employee.

يمكن تعيين مندوب contravariant لمندوب آخر من نفس النوع، ولكن مع معلمة نوع عام أقل اشتقاقاً.

مثال

ويبين المثال التالي كيفية إعلان وتوسيع نطاق تنفيذ واجهة contravariant عامة . وتبين أيضا كيف يمكنك استخدام التحويل الضمني للفئات التي تقوم بتطبيق هذه الواجهة.

' Contravariant interface.
Interface IContravariant(Of In A)
End Interface

' Extending contravariant interface.
Interface IExtContravariant(Of In A)
    Inherits IContravariant(Of A)
End Interface

' Implementing contravariant interface.
Class Sample(Of A)
    Implements IContravariant(Of A)
End Class

Sub Main()
    Dim iobj As IContravariant(Of Object) = New Sample(Of Object)()
    Dim istr As IContravariant(Of String) = New Sample(Of String)()

    ' You can assign iobj to istr, because
    ' the IContravariant interface is contravariant.
    istr = iobj
End Sub

ويبين المثال التالي كيفية إنشاء مثيل،و تعريف واستدعاء مفوض contravariant عام. ويُظهر أيضاً كيف يمكنك ضمنيًا تحويل نوع تفويض.

' Contravariant delegate.
Public Delegate Sub DContravariant(Of In A)(ByVal argument As A)

' Methods that match the delegate signature.
Public Shared Sub SampleControl(ByVal control As Control)
End Sub

Public Shared Sub SampleButton(ByVal control As Button)
End Sub

Private Sub Test()

    ' Instantiating the delegates with the methods.
    Dim dControl As DContravariant(Of Control) =
        AddressOf SampleControl
    Dim dButton As DContravariant(Of Button) =
        AddressOf SampleButton

    ' You can assign dControl to dButton
    ' because the DContravariant delegate is contravariant.
    dButton = dControl

    ' Invoke the delegate.
    dButton(New Button())
End Sub

راجع أيضًا:

المرجع

Out (معدّل عام) في (Visual Basic)

المبادئ

الالفرق في الواجهات العامة (C# و Visual Basic)