Chapter 9. Delegates, Lambdas, and Events
The most common way to use an API is to invoke the methods and properties its classes provide, but sometimes, things need to work in reverse—the API may need to call your code. In Chapter 5, I showed the search features offered by arrays and lists. To use these, I wrote a method that returned true
when its argument met my criteria, and the relevant APIs called my method for each item they inspected. Not all callbacks are immediate. Asynchronous APIs can call a method in our code when long-running work completes. In a client-side application, I want my code to run when the user interacts with certain visual elements in particular ways, such as clicking a button.
Interfaces and virtual methods can enable callbacks. In Chapter 4, I showed the IComparer<T>
interface, which defines a single CompareTo
method. This is called by methods like Array.Sort
when we want a customized sort ordering. You could imagine a UI framework that defined an IClickHandler
interface with a Click
method, and perhaps also DoubleClick
. The framework could require us to implement this interface if we want to be notified of button clicks.
In fact, none of .NET’s UI frameworks use the interface-based approach, because it gets cumbersome when you need multiple kinds of callback. Single- and double-clicks are the tip of the iceberg for user interactions—in WPF applications, each UI element can provide over 100 kinds of notifications. Most of the time, you need to handle ...
Get Programming C# 8.0 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.