Standard pattern EventHandler and EventArgs
Context: The .NET standard event pattern uses EventHandler delegate and EventArgs (or a derived class) to pass event data.
EventHandler delegate
Section titled “EventHandler delegate”public delegate void EventHandler(object sender, EventArgs e);public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);Custom EventArgs
Section titled “Custom EventArgs”public class OrderEventArgs : EventArgs{ public int OrderId { get; set; } public decimal Amount { get; set; }}Implementing the pattern
Section titled “Implementing the pattern”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 }); }}Real-world usage example
Section titled “Real-world usage example”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.