Reflection is the ability to examine, understand, and modify the internal structure of an object through reading/writing of metadata at runtime. Most statically typed languages have a built-in reflection capability, most likely through the use of a library. It is important to understand that because reflection happens at runtime there is no type checking at compile time for reflection based code. This can lead to unpredictable behavior and bugs. Reflection also has a performance impact, as it requires a lot of runtime processing to perform in order to manipulate objects in memory.