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
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
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
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
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
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)
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
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
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