Used to delay when a type is retrieved, mostly to solve cyclic dependencies
Compile time type of the type returned
Used to delay when a type is retrieved, mostly to solve cyclic dependencies