Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kovarant arabirim, yöntemlerinin arabirimde belirtilenlerden daha fazla türetilmiş tür döndürmesine olanak tanır. Değişken karşıtı arabirim, yöntemlerinin arabirimde belirtilenlerden daha az türetilmiş türlerdeki parametreleri kabul etmesine olanak tanır.
.NET Framework 4'teki çeşitli mevcut arabirimler kovaryant ve kontravaryant hale geldi. Bunlar IEnumerable<T> ve IComparable<T> içerir. Bu, türetilmiş tür koleksiyonları için genel temel tür koleksiyonlarıyla çalışan yöntemleri yeniden kullanmanıza olanak tanır.
.NET Framework'teki değişken arabirimlerin listesi için bkz. Genel Arabirimlerde Varyans (Visual Basic).
Genel Koleksiyonları Dönüştürme
Aşağıdaki örnek, arabirimdeki kovaryans desteğinin IEnumerable<T> avantajlarını göstermektedir. yöntemi, PrintFullName türündeki IEnumerable(Of Person) bir koleksiyonu parametre olarak kabul eder. Ancak, IEnumerable(Of Person), Employee öğesinden türediği için Person türündeki bir koleksiyon için bunu yeniden kullanabilirsiniz.
' Simple hierarchy of classes.
Public Class Person
Public Property FirstName As String
Public Property LastName As String
End Class
Public Class Employee
Inherits Person
End Class
' The method has a parameter of the IEnumerable(Of Person) type.
Public Sub PrintFullName(ByVal persons As IEnumerable(Of Person))
For Each person As Person In persons
Console.WriteLine(
"Name: " & person.FirstName & " " & person.LastName)
Next
End Sub
Sub Main()
Dim employees As IEnumerable(Of Employee) = New List(Of Employee)
' You can pass IEnumerable(Of Employee),
' although the method expects IEnumerable(Of Person).
PrintFullName(employees)
End Sub
Genel Koleksiyonları Karşılaştırma
Aşağıdaki örnek, arabirimdeki değişken karşıtı desteğin IComparer<T> avantajlarını göstermektedir.
PersonComparer sınıfı, IComparer(Of Person) arabirimini uygular. Ancak, EmployeeEmployee devraldığından Person türündeki bir nesne dizisini karşılaştırmak için bu sınıfı yeniden kullanabilirsiniz.
' Simple hierarchy of classes.
Public Class Person
Public Property FirstName As String
Public Property LastName As String
End Class
Public Class Employee
Inherits Person
End Class
' The custom comparer for the Person type
' with standard implementations of Equals()
' and GetHashCode() methods.
Class PersonComparer
Implements IEqualityComparer(Of Person)
Public Function Equals1(
ByVal x As Person,
ByVal y As Person) As Boolean _
Implements IEqualityComparer(Of Person).Equals
If x Is y Then Return True
If x Is Nothing OrElse y Is Nothing Then Return False
Return (x.FirstName = y.FirstName) AndAlso
(x.LastName = y.LastName)
End Function
Public Function GetHashCode1(
ByVal person As Person) As Integer _
Implements IEqualityComparer(Of Person).GetHashCode
If person Is Nothing Then Return 0
Dim hashFirstName =
If(person.FirstName Is Nothing,
0, person.FirstName.GetHashCode())
Dim hashLastName = person.LastName.GetHashCode()
Return hashFirstName Xor hashLastName
End Function
End Class
Sub Main()
Dim employees = New List(Of Employee) From {
New Employee With {.FirstName = "Michael", .LastName = "Alexander"},
New Employee With {.FirstName = "Jeff", .LastName = "Price"}
}
' You can pass PersonComparer,
' which implements IEqualityComparer(Of Person),
' although the method expects IEqualityComparer(Of Employee)
Dim noduplicates As IEnumerable(Of Employee) = employees.Distinct(New PersonComparer())
For Each employee In noduplicates
Console.WriteLine(employee.FirstName & " " & employee.LastName)
Next
End Sub