Class that provides extensible properties and methods to an existing object when cast to dynamic. This dynamic object stores 'extra' properties in a dictionary or checks the actual properties of the instance passed via constructor.

This class can be subclassed to extend an existing type or you can pass in an instance to extend. Properties (both dynamic and strongly typed) can be accessed through an indexer.

This type allows you three ways to access its properties:

Directly: any explicitly declared properties are accessible Dynamic: dynamic cast allows access to dictionary and native properties/methods Dictionary: Any of the extended properties are accessible via IDictionary interface