In (Genel Değiştirici) (Visual Basic)

Genel tür parametreleri için In anahtar sözcüğü tür parametresinin değişkensiz olduğunu belirtir.

Açıklamalar

Contravariance, genel parametre tarafından belirtilenden daha az türetilmiş bir tür kullanmanızı sağlar. Bu, değişken arabirimleri uygulayan sınıfların örtük olarak dönüştürülmesini ve temsilci türlerinin örtük olarak dönüştürülmesini sağlar.

Daha fazla bilgi için bkz . Kovaryans ve Contravariance.

Kurallar

Anahtar sözcüğünü In genel arabirimlerde ve temsilcilerde kullanabilirsiniz.

Tür parametresi, yalnızca yöntem bağımsız değişkenlerinin türü olarak kullanılıyorsa ve yöntem dönüş türü olarak kullanılmıyorsa genel bir arabirimde veya temsilcide değişken karşıtı olarak bildirilebilir. ByRef parametreleri birlikte değişken veya değişken karşıtı olamaz.

Kovaryans ve kontravaryans, başvuru türleri için desteklenir ve değer türleri için desteklenmez.

Visual Basic'te, temsilci türünü belirtmeden değişken olmayan arabirimlerde olayları bildiremezsiniz. Ayrıca, değişken karşıtı arabirimler iç içe sınıflara, numaralandırmalara veya yapılara sahip olamaz, ancak iç içe arabirimlere sahip olabilirler.

Davranış

Değişken karşıtı tür parametresine sahip bir arabirim, yöntemlerinin arabirim türü parametresi tarafından belirtilenlerden daha az türetilmiş türdeki bağımsız değişkenleri kabul etmesine olanak tanır. Örneğin, .NET Framework 4'te, arabiriminde IComparer<T> T türü değişkensiz olduğundan, türünden devralıyorsa EmployeePersonherhangi bir IComparer(Of Person) özel dönüştürme yöntemi kullanmadan türündeki IComparer(Of Employee) bir nesnesine atayabilirsiniz.

Değişken karşıtı bir temsilciye aynı türde başka bir temsilci atanabilir, ancak daha az türetilmiş genel tür parametresiyle.

Örnek - değişken karşıtı genel arabirim

Aşağıdaki örnekte değişken karşıtı genel bir arabirim bildirme, genişletme ve uygulama gösterilmektedir. Ayrıca bu arabirimi uygulayan sınıflar için örtük dönüştürmeyi nasıl kullanabileceğinizi de gösterir.

' 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

Örnek - değişken karşıtı genel temsilci

Aşağıdaki örnekte, değişken karşıtı genel temsilci bildirme, örneği oluşturma ve çağırma adımları gösterilmektedir. Ayrıca, bir temsilci türünü örtük olarak nasıl dönüştürebileceğinizi de gösterir.

' 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

Ayrıca bkz.