In this chapter, we learned about delegates and how we can define, initiate, and use them in our program. We understood variance in delegates, built-in delegates, and multicast delegates. Finally, we looked at how delegates form the base for events before understanding events, event handlers, and EventArgs.
Now, we can say that events encapsulate delegates and that delegates encapsulate methods.
In the next chapter, we will learn about multithreading and asynchronous processing in C#. We will understand and use threads in our program, and understand tasks, parallel classes, async, await, and much more.