Summary
In this chapter, we looked at reflection services, how to load assemblies at runtime, and querying meta-information about types. We also learned how to execute code dynamically using both system reflection on one hand and the DLR and the dynamic
type on the other hand. The DLR provides dynamic features to C# and enables interoperability with dynamic languages in a simple manner. The last topic we covered in this chapter was attributes. We learned what the common system attributes are and how to create your own types as well as how to use them in reflection.
In the next chapter, we will focus on concurrency and parallelism.