Kovaryans ve Kontravaryans (Visual Basic)

Visual Basic'da kovaryans ve değişken karşıtı, dizi türleri, temsilci türleri ve genel tür bağımsız değişkenleri için örtük başvuru dönüştürmeyi etkinleştirir. Kovaryans atama uyumluluğunu korur ve değişken karşıtı bunu tersine çevirir.

Aşağıdaki kod, atama uyumluluğu, kovaryans ve değişken karşıtı arasındaki farkı gösterir.

' Assignment compatibility.
Dim str As String = "test"
' An object of a more derived type is assigned to an object of a less derived type.
Dim obj As Object = str

' Covariance.
Dim strings As IEnumerable(Of String) = New List(Of String)()
' An object that is instantiated with a more derived type argument
' is assigned to an object instantiated with a less derived type argument.
' Assignment compatibility is preserved.
Dim objects As IEnumerable(Of Object) = strings

' Contravariance.
' Assume that there is the following method in the class:
' Shared Sub SetObject(ByVal o As Object)
' End Sub
Dim actObject As Action(Of Object) = AddressOf SetObject

' An object that is instantiated with a less derived type argument
' is assigned to an object instantiated with a more derived type argument.
' Assignment compatibility is reversed.
Dim actString As Action(Of String) = actObject

Diziler için kovaryans, daha türetilmiş bir tür dizisini daha az türetilmiş bir tür dizisine örtük olarak dönüştürmeyi sağlar. Ancak bu işlem, aşağıdaki kod örneğinde gösterildiği gibi güvenli tür değildir.

Dim array() As Object = New String(10) {}
' The following statement produces a run-time exception.
' array(0) = 10

Yöntem grupları için kovaryans ve kontravaryans desteği, temsilci türleriyle eşleşen yöntem imzalarına olanak tanır. Bu, temsilcilere yalnızca eşleşen imzaları olan yöntemleri değil, aynı zamanda daha fazla türetilmiş tür (kovaryans) döndüren veya temsilci türü tarafından belirtilenden daha az türetilmiş türe (contravariance) sahip parametreleri kabul eden yöntemleri atamanızı sağlar. Daha fazla bilgi için bkz. Temsilcilerde Varyans (Visual Basic) ve Temsilcilerde Varyansı Kullanma (Visual Basic).

Aşağıdaki kod örneği, yöntem grupları için kovaryans ve kontravaryans desteğini gösterir.

Shared Function GetObject() As Object
    Return Nothing
End Function

Shared Sub SetObject(ByVal obj As Object)
End Sub

Shared Function GetString() As String
    Return ""
End Function

Shared Sub SetString(ByVal str As String)

End Sub

Shared Sub Test()
    ' Covariance. A delegate specifies a return type as object,
    ' but you can assign a method that returns a string.
    Dim del As Func(Of Object) = AddressOf GetString

    ' Contravariance. A delegate specifies a parameter type as string,
    ' but you can assign a method that takes an object.
    Dim del2 As Action(Of String) = AddressOf SetObject
End Sub

.NET Framework 4 veya sonraki sürümlerde Visual Basic, genel arabirimlerde ve temsilcilerde kovaryans ve kontravaryansı destekler ve genel tür parametrelerinin örtük olarak dönüştürülmesini sağlar. Daha fazla bilgi için bkz. Genel Arabirimlerde Varyans (Visual Basic) ve Temsilcilerde Varyans (Visual Basic).

Aşağıdaki kod örneği, genel arabirimler için örtük başvuru dönüştürmesini gösterir.

Dim strings As IEnumerable(Of String) = New List(Of String)
Dim objects As IEnumerable(Of Object) = strings

Genel parametreleri birlikte değişken veya değişken karşıtı olarak bildirilirse, genel arabirim veya temsilci değişken olarak adlandırılır. Visual Basic kendi değişken arabirimlerinizi ve temsilcilerinizi oluşturmanıza olanak tanır. Daha fazla bilgi için bkz. Değişken Genel Arabirimleri Oluşturma (Visual Basic) ve Temsilcilerde Varyans (Visual Basic).

Başlık Açıklama
Genel Arabirimlerde Varyans (Visual Basic) Genel arabirimlerde kovaryans ve kontravaryansı açıklar ve .NET Framework değişken genel arabirimlerin bir listesini sağlar.
Değişken Genel Arabirimleri Oluşturma (Visual Basic) Özel değişken arabirimlerinin nasıl oluşturulacağını gösterir.
Genel Koleksiyonlar için Arabirimlerde Varyans Kullanma (Visual Basic) ve IComparable<T> arabirimlerindeki kovaryans ve kontravaryans desteğinin IEnumerable<T> kodu yeniden kullanmanıza nasıl yardımcı olabileceğini gösterir.
Temsilcilerdeki Fark (Visual Basic) Genel ve genel olmayan temsilcilerde kovaryans ve kontravaryansı açıklar ve .NET Framework değişken genel temsilcilerin bir listesini sağlar.
Temsilcilerde Varyans Kullanma (Visual Basic) Yöntem imzalarını temsilci türleriyle eşleştirmek için genel olmayan temsilcilerde kovaryans ve değişken karşıtı desteğin nasıl kullanılacağını gösterir.
Func ve Eylem Genel Temsilcileri için Varyans Kullanma (Visual Basic) ve Action temsilcilerindeki kovaryans ve kontravaryans desteğinin Func kodu yeniden kullanmanıza nasıl yardımcı olabileceğini gösterir.