To understand how designator classes work, it is useful to know about their properties. A few of these properties are accessible programmatically, but others are implicit and only really exist in the compiler. Some of the properties may be empty.
A referenced type is the designator type to which a pointer refers. A designator's referenced-type only has a value for subtypes of <C-statically-typed-pointer>. Programs can access the referenced type through the function referenced-type.
A designator class's pointer-type only has a value for each of those types that has a pointer designator type that refers to it. Most of the constructs that define a new designator type also define a pointer-type for that designator. Many of the macros that define designators accept a pointer-type-name: keyword to bind the pointer-type of the defined designator to a given variable. The pointer-type is not programmatically available because it may not have been defined. You can assure that there is a pointer-type for a particular designator by using the macro define c-pointer-type.
A designator class's import type and export type are instantiable Dylan types that describe the Dylan instantiation of a designator class when it is used in a position that imports values from C, or exports values to C.
Nearly all of the C-FFI's designators have import and export types that are equivalent. Some, such as <C-string>, have different import and export types because it is possible to pass a pointer to a Dylan object to C directly without creating a C pointer object, or copying the underlying data, but when importing a string from C it is not practical to copy the contents and create a Dylan string. By default, the import and export types for any subtype of <C-pointer> are the class itself. You can override this by defining a new subclass with the macro define C-mapped-subtype.
You can define a designator's import-function and export-function by using the macro define c-mapped-subtype. These functions are merely the procedural specifications for translating the C data to Dylan and back. The import and export functions are inherited when you define a subclass for a designator.