トレーニング
Func および Action 汎用デリゲートでの変性の使用 (Visual Basic)
以下の例では、Func
汎用デリゲートと Action
汎用デリゲートの共変性と反変性を使用して、メソッドの再利用を可能にし、コードの柔軟性を高める方法を示します。
共変性と反変性の詳細については、「デリゲートの変性 (Visual Basic)」を参照してください。
次の例は、Func
汎用デリゲートにおける共変性のサポートの利点を示しています。 FindByTitle
メソッドは、String
型のパラメーターを受け取り、Employee
型のオブジェクトを返します。 ただし、このメソッドは Func(Of String, Person)
デリゲートに割り当てることもできます。これは Employee
が Person
を継承するためです。
' Simple hierarchy of classes.
Public Class Person
End Class
Public Class Employee
Inherits Person
End Class
Class Finder
Public Shared Function FindByTitle(
ByVal title As String) As Employee
' This is a stub for a method that returns
' an employee that has the specified title.
Return New Employee
End Function
Sub Test()
' Create an instance of the delegate without using variance.
Dim findEmployee As Func(Of String, Employee) =
AddressOf FindByTitle
' The delegate expects a method to return Person,
' but you can assign it a method that returns Employee.
Dim findPerson As Func(Of String, Person) =
AddressOf FindByTitle
' You can also assign a delegate
' that returns a more derived type to a delegate
' that returns a less derived type.
findPerson = findEmployee
End Sub
End Class
次の例は、Action
汎用デリゲートにおける反変性のサポートの利点を示しています。 AddToContacts
メソッドは、Person
型のパラメーターを受け取ります。 ただし、このメソッドは Action(Of Employee)
デリゲートに割り当てることもできます。これは Employee
が Person
を継承するためです。
Public Class Person
End Class
Public Class Employee
Inherits Person
End Class
Class AddressBook
Shared Sub AddToContacts(ByVal person As Person)
' This method adds a Person object
' to a contact list.
End Sub
Sub Test()
' Create an instance of the delegate without using variance.
Dim addPersonToContacts As Action(Of Person) =
AddressOf AddToContacts
' The Action delegate expects
' a method that has an Employee parameter,
' but you can assign it a method that has a Person parameter
' because Employee derives from Person.
Dim addEmployeeToContacts As Action(Of Employee) =
AddressOf AddToContacts
' You can also assign a delegate
' that accepts a less derived parameter
' to a delegate that accepts a more derived parameter.
addEmployeeToContacts = addPersonToContacts
End Sub
End Class
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
その他のリソース
ドキュメント
-
詳細情報: ラムダ式 (Visual Basic)
-
詳細情報: デリゲート (Visual Basic)
-
詳細情報: 拡張メソッド (Visual Basic)