Acerca de AddressOf en VB.NET
El siguiente ejemplo sugiere el uso de delegados
Este ejemplo demuestra cómo usar delegados para pasar un procedimiento almacenado a otro.
Un delegado es un tipo que se puede utilizar en Visual Basic como otros tipos. Si aplica el operador AddressOf a un nombre de procedimiento almacenado, se devuelve un objeto delegado.
El procedimiento almacenado en este ejemplo tiene un parámetro delegado que acepta una referencia a otro procedimiento almacenado, que se obtiene utilizando el operador AddressOf.
Crear un delegado y hacer coincidir el procedimiento almacenado
Cree un delegado llamado MathOperator.
Visual Basic
Copiar código
Función delegada MathOperator( _
ByVal x As Double, _
ByVal y As Double _
) As Double
Crea un procedimiento almacenado llamado AddNumbers cuyos parámetros y valores de retorno coincidan con los del MathOperator para que Signatures coincida.
Visual Basic
Copiar código
Función AddNumbers( _
ByVal x As Double, _
ByVal y As Double _
) As Double
Retornar x + y
Función final
Crea un procedimiento almacenado llamado SubtractNumbers, Su firma coincide con MathOperator.
Visual Basic
Copiar código
Función RestarNúmeros( _
ByVal x As Double, _
ByVal y como doble _
) como doble
devolver x - y
función final
Cree un procedimiento almacenado llamado DelegateTest, el procedimiento almacenado El procedimiento acepta un delegado como parámetro.
Este procedimiento almacenado puede aceptar referencias a AddNumbers o SubtactNumbers porque sus firmas coinciden con la firma del MathOperator.
Visual Basic
Copiar código
Sub DelegateTest( _
ByVal x As Double, _
ByVal op As MathOperator, _
ByVal y As Double _
)
Dim ret As Double
ret = op.Invoke(x , y) 'Método de llamada.
MsgBox(ret)
End Sub
Cree un procedimiento almacenado llamado prueba, use el delegado AddNumbers como parámetro, llame a DelegateTest una vez y luego use el Delegado de SubtractNumbers Llámelo nuevamente como parámetro.
Visual Basic
Copiar código
Subprueba protegida()
DelegateTest(5, AddressOf AddNumbers, 3)
p >DelegateTest(9, AddressOf SubtractNumbers, 3)
End Sub
Cuando se llama a Test, primero muestra el resultado de AddNumbers entre 5 y 3, es decir 8, y luego muestra el resultado de Restar Números entre 9 y 3, que es 6.
Crea un subdelegado llamado MySubDelegate.
Delegate Sub MySubDelegate(ByVal x As Integer)
Declara una clase que contiene un método con la misma firma que este delegado.
Clase clase1 Sub Sub1(ByVal x As Integer) MsgBox("El valor de x es: " & CStr(x))End Sub End Class
Llamando al incorporado Invocar método Para llamar a un método asociado con un delegado, defina un método para crear una instancia de este delegado y llame al método asociado con este delegado.
Protected Sub DelegateTest() Dim c1 As New class1 ' Crea una instancia delegada. Dim msd As MySubDelegate = AddressOf c1.