Skip to content

Standard pattern EventHandler and EventArgs

Context: The .NET standard event pattern uses EventHandler delegate and EventArgs (or a derived class) to pass event data.

public delegate void EventHandler(object sender, EventArgs e);
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
public class OrderEventArgs : EventArgs
{
public int OrderId { get; set; }
public decimal Amount { get; set; }
}
public class OrderProcessor
{
public event EventHandler<OrderEventArgs> OrderProcessed;
protected virtual void OnOrderProcessed(OrderEventArgs e)
{
OrderProcessed?.Invoke(this, e);
}
public void Process(int orderId, decimal amount)
{
// processing logic
OnOrderProcessed(new OrderEventArgs { OrderId = orderId, Amount = amount });
}
}

All .NET UI frameworks: Button.Click uses EventHandler. Form.Load uses EventHandler. DataGridView.CellClick uses DataGridViewCellEventArgs derived from EventArgs.

Example: System.EventArgs documentation shows many derived types.