Delegates
The .NET Framework supports callbacks from one object to another by means of the class Delegate. A Delegate represents a pointer to an individual object method or to a static class method. You generally will not use the Delegate class directly, but instead will use the wrapper provided by your programming language. The .NET Framework event system uses delegates. The object wanting to receive the event provides the sender with a delegate, and the sender calls the function on the delegate to signal the event.
The .NET Framework supports asynchronous method invocation for any method on any object. The caller can either poll for completion, or pass a delegate of the AsyncCallback class to be notified of completion by an asynchronous callback.