Delegate — function pointer. Event — restricted delegate.
Delegate:
Event:
1// Delegate2public Action<string> OnMessage;3OnMessage?.Invoke("hello"); // Anyone can invoke45// Event6public event EventHandler<MessageEventArgs> MessageReceived;7MessageReceived?.Invoke(this, args); // Only inside class
Key: Events for encapsulation.