Como: Implementar eventos em sua classe

Os seguintes procedimentos descrevem como implementar um evento em uma classe.O primeiro procedimento implementa um evento que não possui dados associados; ele usa as classes System.EventArgs e System.EventHandler como dados do evento e como manipulador de representante.O segundo procedimento implementa um evento com dados personalizados; ele define classes personalizadas para os dados do evento e o manipulador de representante de evento.

Para obter um exemplo completo que ilustra a geração e manuseio de eventos, consulte Como: Gerar e consumir eventos.

Para implementar um evento sem dados de eventos específicos

  1. Defina um membro de evento, público, em sua classe.Defina o tipo do membro de evento como um representante de System.EventHandler.

    public class Countdown 
    {
        ...
        public event EventHandler CountdownCompleted;   
    }
    
    Public Class Countdown
        ...
        Public Event CountdownCompleted As EventHandler
    End Class
    
  2. Fornece um método protegido na sua classe que lança o evento.Nomeie o método como OnEventName.Lance o evento dentro do método

    public class Countdown 
    {
        ...
        public event EventHandler CountdownCompleted;   
        protected virtual void OnCountdownCompleted(EventArgs e)    {        if (CountdownCompleted != null)            CountdownCompleted(this, e);    }
    }
    
    Public Class Countdown
       ...
       Public Event CountdownCompleted As EventHandler
       Protected Overridable Sub OnCountdownCompleted(e As EventArgs)      RaiseEvent CountdownCompleted(Me, e)   End Sub
    End Class
    
  3. Determine quando lançar o evento na sua classe.Chame o método OnEventName para gerar o evento.

    public class Countdown 
    {
        ...
        public void Decrement
        {
            internalCounter = internalCounter - 1;
            if (internalCounter == 0)
                OnCountdownCompleted(new EventArgs());
        }
    }
    
    Public Class Countdown
        ...
        Public Function Decrement
            InternalCounter = internalCounter - 1
            If internalCounter = 0
                OnCountdownComplete(New EventArgs())
            End If
        End Function
    End Class
    

Para implementar um evento sem dados de eventos específicos

  1. Defina uma classe que fornece dados para o evento.Nomeie a classe como EventNameArgs, derive a classe de System.EventArgs e adicione todos os membros de eventos específicos.

    public class AlarmEventArgs : EventArgs 
    {
       private readonly int nrings = 0;
       private readonly bool snoozePressed = false;
    
       //Constructor.
       public AlarmEventArgs(bool snoozePressed, int nrings) 
       {
          this.snoozePressed = snoozePressed;
          this.nrings = nrings;
       }
    
       //Properties.
       public string AlarmText {  
          ...
       }
       public int NumRings {
          ...
       }
       public bool SnoozePressed{
          ...
       }
    }
    
    Public Class AlarmEventArgs
       Inherits EventArgs
       Private nrings As Integer = 0
       Private _snoozePressed As Boolean = False
    
       'Constructor.
       Public Sub New(ByVal snoozePressed As Boolean, ByVal nrings As Integer) 
          Me.snoozePressed = snoozePressed
          Me.nrings = nrings
       End Sub
    
       'Properties.
       Public ReadOnly Property AlarmText() As String
          ...
       End Property 
    
       Public ReadOnly Property NumRings() As Integer
          ...
       End Property 
    
       Public ReadOnly Property SnoozePressed() As Boolean
          ...
       End Property
    End Class
    
  2. Declare um representante para o evento.Nomeie o representante como EventNameEventHandler.

    public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
    
    Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
    
  3. Defina um membro de evento, público, denominado EventName na sua classe.Defina o tipo do membro de evento como o tipo de representante de evento.

    public class AlarmClock 
    {
        ...
        public event AlarmEventHandler Alarm;
    }
    
    Public Class AlarmClock
        ...
        Public Event Alarm As AlarmEventHandler
    End Class
    
  4. Define um método protegido na sua classe que lança o evento.Nomeie o método como OnEventName.Lance o evento dentro do método

    public class AlarmClock 
    {
        ...
        public event AlarmHandler Alarm;
        protected virtual void OnAlarm(AlarmEventArgs e)    {      if (Alarm != null)           Alarm(this, e);     }
    }
    
    Public Class AlarmClock
        ...
        Public Event Alarm As AlarmEventHandler
        Protected Overridable Sub OnAlarm(e As AlarmEventArgs)        RaiseEvent Alarm(Me, e)    End Sub
    End Class
    
  5. Determine quando lançar o evento na sua classe.Chame OnEventName para lançar o evento e passar os dados de eventos específicos usando EventName EventArgs.

    Public Class AlarmClock
    {
        ...
        public void Start()
        {
            ...
            System.Threading.Thread.Sleep(300);
            AlarmEventArgs e = new AlarmEventArgs(false, 0);
            OnAlarm(e);
        }
    }
    
    Public Class AlarmClock
        ...
        Public Function Start
            ...
            System.Threading.Thread.Sleep(300)
            Dim e As AlarmEventArgs = New AlarmEventArgs(False, 0)
            OnAlarm(e)
        End Function
    End Class
    

Consulte também

Tarefas

Como: Gerar e consumir eventos

Conceitos

Eventos e representantes

Gerando um evento

Outros recursos

Tratamento e disparada de eventos