Aracılığıyla paylaş


Temsilcilerde Varyansı Kullanma (Visual Basic)

Bir temsilciye bir yöntem atadığınızda, kovaryans ve ters değişken , bir temsilci türünü yöntem imzası ile eşleştirme esnekliği sağlar. Kovaryans, bir metodun temsilcide tanımlanandan daha fazla türetilmiş dönüş türüne sahip olmasına olanak tanır. Contravariance, temsilci türündekilerden daha az türetilmiş parametre türlerine sahip bir yönteme izin verir.

Örnek 1: Kovaryans

Açıklama

Bu örnek, temsilcilerin, temsilci imzasında belirtilen dönüş türlerinden türetilen dönüş türlerine sahip yöntemlerle nasıl kullanılabileceğini gösterir. DogsHandler tarafından döndürülen veri türü, temsilcide tanımlanan Dogs türünden türetilen Mammals türündedir.

Kod

Class Mammals
End Class

Class Dogs
    Inherits Mammals
End Class
Class Test
    Public Delegate Function HandlerMethod() As Mammals
    Public Shared Function MammalsHandler() As Mammals
        Return Nothing
    End Function
    Public Shared Function DogsHandler() As Dogs
        Return Nothing
    End Function
    Sub Test()
        Dim handlerMammals As HandlerMethod = AddressOf MammalsHandler
        ' Covariance enables this assignment.
        Dim handlerDogs As HandlerMethod = AddressOf DogsHandler
    End Sub
End Class

Örnek 2: Kontravaryans

Açıklama

Bu örnek, temsilcilerin, parametre türleri temsilci imzasındaki parametre türünün temel türleri olan yöntemlerle nasıl kullanılabileceğini gösterir. Contravariance ile ayrı işleyiciler yerine tek bir olay işleyicisi kullanabilirsiniz. Aşağıdaki örnekte iki temsilci kullanılır:

  • KeyEventHandler Button.KeyDown olayının imzasını tanımlayan bir temsilci. İmzası:

    Public Delegate Sub KeyEventHandler(sender As Object, e As KeyEventArgs)
    
  • MouseEventHandler Button.MouseClick olayının imzasını tanımlayan bir temsilci. İmzası:

    Public Delegate Sub MouseEventHandler(sender As Object, e As MouseEventArgs)
    

Örnek, bir EventArgs parametresine sahip olay işleyicisi tanımlar ve bunu hem Button.KeyDown hem Button.MouseClick olaylarını işlemek için kullanır. Bunu yapabilir çünkü EventArgs hem KeyEventArgs hem de MouseEventArgs için bir taban türdür.

Kod

' Event handler that accepts a parameter of the EventArgs type.
Private Sub MultiHandler(ByVal sender As Object,
                         ByVal e As System.EventArgs)
    Label1.Text = DateTime.Now
End Sub

Private Sub Form1_Load(ByVal sender As System.Object,
    ByVal e As System.EventArgs) Handles MyBase.Load

    ' You can use a method that has an EventArgs parameter,
    ' although the event expects the KeyEventArgs parameter.
    AddHandler Button1.KeyDown, AddressOf MultiHandler

    ' You can use the same method
    ' for the event that expects the MouseEventArgs parameter.
    AddHandler Button1.MouseClick, AddressOf MultiHandler
End Sub

Ayrıca bakınız