Definitions typically refer to other definitions indirectly, by name,
using an IReference.
This indirection scheme allows definitions to be shared across projects.
This is important because there are many definitions in the core SWCs
that many projects use -- such as the Flash, AIR, and Flex SWCs -- and
it would waste memory to keep of copy of all of them in each project.
For example, consider the UIComponent class
in framework.swc, which extends Sprite,
and consider two Flex projects,
one of which links against playerglogal.swc
and the other links against airglobal.swc.
In one project, the superclass of UIComponent
is the flash.display.Sprite class in
playerglobal.swc; in the other, it is the
flash.display.Sprite class in airglobal.swc.
(They could be different, even though they have the same name.)
Therefore, if we want to have a project-independent class definition
for UIComponent, it cannot refer directly to the definition
for its superclass. Instead, it stores an IReference to
flash.display.Sprite, which gets resolved differently
in the two projects.
In some cases, is definition can keep direct references to other definitions. For example, a function definition keeps direct references to the definitions for its parameters, and a class definition keeps direct references to the definitions for its events, styles, and effects.