In visual basic, Func is a built-in generic delegate and it is useful to hold the reference of one or more methods which is having the same method signature without declaring any custom delegate object.
In the previous chapters, we learned about delegates and that will be used like as shown following to hold the reference of methods which is having the same signature.
Module Module1
' Declare Delegate
Public Delegate Function SampleDelegate(ByVal a As Integer, ByVal b As Integer) As Integer
Sub Main(ByVal args As String())
Dim result As Integer = 0
Dim dlgt As SampleDelegate = AddressOf Add
result = dlgt(10, 90)
Console.WriteLine("Add Result: {0}", result)
dlgt = AddressOf Subtract
result = dlgt(10, 90)
Console.WriteLine("Subtract Result: {0}", result)
Console.ReadLine()
End Sub
Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
Public Function Subtract(ByVal x As Integer, ByVal y As Integer) As Integer
Return x - y
End Function
End Module
If you observe the above example, we created a delegate object called “SampleDelegate” to hold the reference of Add & Subtract methods.
When we execute the above example, we will get the result as shown below.
Add Result: 100
Subtract Result: -80
To avoid the declaration of custom delegate object (SampleDelegate) like as we defined in the above example, the generic built-in delegates such as Func, Action, Predicate have been introduced in the latest versions.
In latest versions, the Func delegate will available automatically with System namespace and it will accept zero or more (16) input parameters and one output parameter.
Following is the syntax of declaring a Func delegate with one input parameter and one output parameter in visual basic.
Public Delegate Function Func(Of In T, Out TResult)(ByVal arg As T) As TResult
Here, the Out parameter in the bracket ( )
will be considered as output parameter (return type) and remaining all are considered as input parameters.
Parameter | Description |
---|---|
TResult | It represents the type of the return value of the method that the delegate encapsulates. |
T | It represents the type of the parameter of the method that the delegate encapsulates. |
In case, if we want to create a Func delegate with two input parameters and return type (output parameter) that would be like as shown below.
Public Delegate Function Func(Of In T1, In T2, Out TResult)(ByVal arg As T1, ByVal arg As T2) As TResult
Like this a Func delegate can include 0 to 16 input parameters of different types and one output parameter for the result.
Following is the example of defining the Func delegate to hold the reference of one or more methods which is having same method signature.
Module Module1
Sub Main(ByVal args As String())
Dim result As Integer = 0
Dim dlgt As Func(Of Integer, Integer, Integer) = AddressOf Add
result = dlgt(10, 90)
Console.WriteLine("Add Result: {0}", result)
dlgt = AddressOf Subtract
result = dlgt(10, 90)
Console.WriteLine("Subtract Result: {0}", result)
Console.ReadLine()
End Sub
Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
Public Function Subtract(ByVal x As Integer, ByVal y As Integer) As Integer
Return x - y
End Function
End Module
If you observe the above example, we created a Func delegate object (dlgt) with two input parameters (int) and one output parameter (int) to return int value.
Here, the declaration of Func(Of Integer, Integer, Integer> dlgt is same as SampleDelegate object in the previous example.
When we execute the above example, we will get the result as shown below.
Add Result: 100
Subtract Result: -80
Every time while creating the Func delegate we must need to remember that we can include 0 to 16 input parameters of different types and that is optional, but we must need to include one output parameter for the return type.
Following is the example of creating a Func delegate with zero (0) input parameters and one output parameter.
Dim dlgt As Func(Of Integer)
In visual basic, we can assign the anonymous method directly to the Func delegate by using delegate keyword like as shown below.
Sub Main(ByVal args As String())
Dim dlgt As Func(Of Integer, Integer, Integer) = Function(x As Integer, y As Integer) x + y
Dim i As Integer = dlgt(10, 90)
Console.WriteLine("Result: {0}", i) ' Result: 100
End Sub
If you observe the above code, we assigned an anonymous method directly to Func delegate object (dlgt) using the delegate keyword.
In visual basic, we can also use Func delegate with lambda expressions. The lambda expressions are the shorthand way for declaring the anonymous method.
Sub Main(ByVal args As String())
Dim dlgt As Func(Of Integer, Integer, Integer) = Function(x, y) x + y
Dim i As Integer = dlgt(10, 90)
Console.WriteLine("Result: {0}", i) ' Result: 100
End Sub
The following are the important points which we need to remember about Func delegate in visual basic.