Chapter 12. Delegates and Events
When a head of state dies, the president of the United States
typically does not have time to attend the funeral personally.
Instead, he dispatches a delegate. Often this delegate is the vice
president, but sometimes the VP is unavailable and the president must
send someone else, such as the secretary of state or even the first
lady. He does not want to
"hardwire" his delegated authority
to a single person; he might delegate this responsibility to anyone
who is able to execute the correct international protocol.
The president defines in advance what responsibility will be
delegated (attend the funeral), what parameters will be passed
(condolences, kind words), and what value he hopes to get back (good
will). He then assigns a particular person to that delegated
responsibility at "runtime" as the
course of his presidency progresses.
In programming, you are often faced with situations where you need to
execute a particular action, but you don't know in
advance which method, or even which object, you'll
want to call upon to execute it. For example, a button might know
that it must notify some object when it is pushed, but it might not
know which object or objects need to be notified. Rather than wiring
the button to a particular object, you will connect the button to a
delegate and then resolve that delegate to a
particular method when the program executes.
In the early, dark, and primitive days of computing, a program would
begin execution and then proceed through its steps until it
completed. If the user was involved, the interaction was strictly
controlled and limited to filling in fields.
Today's Graphical User Interface (GUI) programming
model requires a different approach, known as
event-driven programming. A
modern program presents the user interface and waits for the user to
take an action. The user might take many different actions, such as
choosing among menu selections, pushing buttons, updating text
fields, clicking icons, and so forth. Each action causes an event to
be raised. Other events can be raised without direct user action,
such as events that correspond to timer ticks of the internal clock,
email being received, file-copy operations completing, etc.
An event is the encapsulation of the idea that
"something happened" to which the
program must respond. Events and delegates are tightly coupled
concepts because flexible event handling requires that the response
to the event be dispatched to the appropriate event handler. An event
handler is typically implemented in C# as a delegate.
Delegates are also used as callbacks so that one class can say to
another "do this work and when
you're done, let me know."
|