Birlikte değişkenlik ve Kontravaryans (Visual Basic)
Bu Visual Basic değişkenlik ve kontravaryans dizi türleri, temsilci türleri ve genel tür bağımsız değişkenleri için örtülü başvuru dönüştürmeyi etkinleştirir. Birlikte değişken atama uyumluluğunu korur ve değişkenliği tersine çevirer.
Aşağıdaki kod atama uyumluluğu, birlikte değişkenlik ve değişken değişkenliği 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 birlikte değişkenlik, daha türetilmiş bir türe sahip bir dizinin daha az türetilmiş bir türe sahip bir diziye örtülü olarak dönüşüme olanak sağlar. Ancak bu işlem, aşağıdaki kod örneğinde gösterildiği gibi güvenli 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 birlikte değişkenlik ve kontravaryans desteği, temsilci türleriyle yöntem imzalarını eşleştirmeye olanak sağlar. Bu, temsilcilere yalnızca eşleşen imzalara sahip yöntemleri değil, aynı zamanda daha fazla türetilmiş tür (birlikte değişken) veya temsilci türü tarafından belirtilenden daha az türetilmiş türe (kontravaryans) sahip parametreleri kabul eden yöntemler atamaya olanak 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 birlikte değişkenliği ve değişkenlik 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
4 .NET Framework sonraki bir Visual Basic, genel arabirimlerde ve temsilcilerde birlikte değişkenliği ve kontravaryansı destekler ve genel tür parametrelerinin örtülü dönüştürmeye olanak 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ülü başvuru dönüştürmeyi gösterir.
Dim strings As IEnumerable(Of String) = New List(Of String)
Dim objects As IEnumerable(Of Object) = strings
Genel parametreler birlikte değişken veya değişken olarak bildirildi ise genel arabirim veya temsilci varyant olarak çağrılır. Visual Basic kendi değişken arabirimlerinizi ve temsilcilerinizi oluşturmanıza olanak sağlar. Daha fazla bilgi için, bkz. Creating Variant Generic Interfaces (Visual Basic) and Variance in Delegates (Visual Basic).
İlgili Konular
| Başlık | Açıklama |
|---|---|
| Genel Arabirimlerde Varyans (Visual Basic) | Genel arabirimlerde birlikte değişkenliği ve kontravaryansı ele almaktadır ve değişkenli genel arabirimlerin listesini .NET Framework. |
| Değişken Genel Arabirimler Oluşturma (Visual Basic) | Özel varyant arabirimleri oluşturma hakkında bilgi sağlar. |
| Genel Koleksiyonlar için Arabirimlerde Varyans Kullanma (Visual Basic) | ve arabirimleri içinde birlikte değişkenlik ve değişkenlik desteğinin kodu yeniden IEnumerable<T> IComparable<T> kullanmanıza nasıl yardımcı olduğunu gösterir. |
| Temsilcilerde Varyans (Visual Basic) | Genel ve genel olmayan temsilcilerde birlikte değişkenliği ve kontravaryansı ele almaktadır ve değişken genel temsilcilerin listesini .NET Framework. |
| Temsilcilerde Varyans Kullanma (Visual Basic) | Yöntem imzalarını temsilci türleriyle eşlerken genel olmayan temsilcilerde birlikte değişkenlik ve değişkenlik desteğini kullanmayı gösterir. |
| Func ve Action Genel Temsilcileri için Varyans Kullanma (Visual Basic) | ve temsilcilerinde birlikte değişkenlik ve kontravaryans desteğinin Func Action kodu yeniden kullanmanıza nasıl yardımcı olduğunu gösterir. |