Delegados?

A menudo preguntamos sobre que son y para que sirven los delegados… valga esta entradrilla :-))

‘Según definición…
‘ Un delegado es un tipo que referencia un método compartido
‘ de un método tipo o una instancia de un objeto
‘ Cualquier procedimiento puede ser utilizado para crear una clase delegada
‘ de la instancia y posteriormente ser invocada a través del delegado
‘ … ea una especie de punteros…

 


‘Aunque el siguiente ejemplo no ilustre todos los usos 
espero sirva de punto de partida para los que empiezan.


‘No olvideis que el delegado puede contener y devolver parámetros…


‘pero eso es trabajo del artista.
 


 Delegate Function MiDelegado()

 Public Class Form1
    Private Encendido As Boolean = False

    Private Sub Form1_Load() Handles MyBase.Load
        ‘construir botón
        Dim MiBoton As New Button
        MiBoton.Text = «Asignar Delegado»
        MiBoton.AutoSize = True
        MiBoton.Dock = DockStyle.Bottom
        ‘al hacer click ejecutar sub
        AddHandler MiBoton.Click, AddressOf EncenderApagar
        ‘añadir botón al form
        Me.Controls.Add(MiBoton)
    End Sub

 
   Private Sub EncenderApagar()
        ‘Crear mi referencia al tipo delegado
        Dim MiRefencia As MiDelegado
        ‘Encender si está apagado / apagar si encendido
        If Not Encendido Then
            ‘asignar referencia a la función de encender
            MiRefencia = AddressOf Encender
        Else
            ‘asignar referencia a la función de apagar
            MiRefencia = AddressOf Apagar
        End If
        ‘Invocar la función en mi delegado
        MessageBox.Show(MiRefencia.Invoke)
    End Sub
   
    ‘Devolver el estado de encendido
    Private Function Encender() As String
        Encendido = True
        Return «Encendido»
    End Function
   
    ‘Devolver el estado de apagado
    Private Function Apagar() As String
        Encendido = False
        Return «Apagado»
    End Function
 End Class

Saludos,
Pep Lluis,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *