All data are objects, and message passing is the only way to manipulate objects.
Even instance variables are accessed solely using message passing. Each Cecil implementation defines how programs are put together. Because the name of an object is visible throughout its declaration block, objects can inherit from objects defined later within the declaration block and methods can be specialized on objects defined later in the declaration block. In environments where the top-level declaration comprising the program is spread across multiple files, the ability to attach methods to objects defined in some other file is important. The next four subsections describe objects, methods, fields, and predicate objects.