class Button { public callback $OnBeforeClick; public callback $OnAfterClick; public string $Name; public void __construct() { $this->Name = 'MyButton'; } public void Click() { $this->DoBeforeClick(); print('Click!'); $this->DoAfterClick(); } private void DoBeforeClick() { if($this->OnBeforeClick) { callback $event = $this->OnBeforeClick; $event($this); } } private void DoAfterClick() { if($this->OnAfterClick) { callback $event = $this->OnAfterClick; $event($this); } } } class Program { public void main() { object $MyWidget = new Button(); $MyWidget->OnBeforeClick = void(object $Sender) { print($Sender->Name + ' (Before Click)'); }; $MyWidget->OnAfterClick = void(object $Sender) { print($Sender->Name + ' (After Click)'); }; $MyWidget->Click(); } }