| 
       USING
        object-type-name package-name namespace .* FROM ASSEMBLY PROPATH | 
| 
       USING Acme.BusObjs.*. 
        DEFINE VARIABLE CustObj AS CLASS Customer. DEFINE VARIABLE CustObj2 AS CLASS Acme.BusObjs.Customer. | 
| 
       USING Acme.BusObjs.Customer. 
        DEFINE VARIABLE CustObj AS CLASS Customer. DEFINE VARIABLE CustObj2 AS CLASS Acme.BusObjs.Customer. | 
| 
       USING System.Windows.Forms.* FROM ASSEMBLY.
        DEFINE VARIABLE rControl AS CLASS Control. DEFINE VARIABLE rCollection AS CLASS Control+ControlCollection. | 
 When a type name is referenced at compile time, ABL uses the specified USING statements to help validate that the type exists in a specified package or loaded assembly.
When a type name is referenced at compile time, ABL uses the specified USING statements to help validate that the type exists in a specified package or loaded assembly.
   This statement must appear before any other compilable statement (except other USING statements or the ROUTINE-LEVEL ON ERROR UNDO, THROWstatement) in a procedure (.p or .w) or class definition (.cls) file. The scope of the statement is the file in which it appears.
This statement must appear before any other compilable statement (except other USING statements or the ROUTINE-LEVEL ON ERROR UNDO, THROWstatement) in a procedure (.p or .w) or class definition (.cls) file. The scope of the statement is the file in which it appears.
   This statement has no effect on the object-type-name that defines the name of a user-defined type in a CLASS or INTERFACE statement. In a CLASS or INTERFACE statement, you must always specify the user-defined type that it defines using the fully qualified object-type-name.
This statement has no effect on the object-type-name that defines the name of a user-defined type in a CLASS or INTERFACE statement. In a CLASS or INTERFACE statement, you must always specify the user-defined type that it defines using the fully qualified object-type-name.
   For both ABL and .NET object types, you can only reference class names for classes, interface names for interfaces (and so on) that are defined in the specified ABL package or .NET namespace. For example, you cannot reference partially qualified class names for classes in packages that are further defined under the specified package. To reference the class names of classes in other packages, even those that appear to be subpackages, you must specify an additional USING statement for each package. For example, given the following class file:
For both ABL and .NET object types, you can only reference class names for classes, interface names for interfaces (and so on) that are defined in the specified ABL package or .NET namespace. For example, you cannot reference partially qualified class names for classes in packages that are further defined under the specified package. To reference the class names of classes in other packages, even those that appear to be subpackages, you must specify an additional USING statement for each package. For example, given the following class file:
  | 
       C:\Classes\Inventory\Shipping.cls
       | 
| 
       USING Classes.*.
        DEFINE VARIABLE clRef AS Inventory.Shipping. /* Invalid */ clRef = NEW Inventory.Shipping(). /* Invalid */ | 
| 
       USING Classes.Inventory.*.
        DEFINE VARIABLE clRef AS Shipping. clRef = NEW Shipping(). | 
 You can also reference the fully qualified type names of any object types identified by this statement. You must sometimes do this to avoid ambiguous class or interface name references.
You can also reference the fully qualified type names of any object types identified by this statement. You must sometimes do this to avoid ambiguous class or interface name references.
   When you reference a constructed .NET generic type name with the presence of appropriate USING statements, you can also specify the type parameters in its name, as well as the generic type name, itself, using unqualified type name references. This also works to resolve unqualified type-name references to the type parameters specified in the generic object-type-name of successive USING statements. In addition, ABL resolves unqualified type-name references to all the constructed generic types that can be defined for a given namespace specified in a USING statement. For example:
When you reference a constructed .NET generic type name with the presence of appropriate USING statements, you can also specify the type parameters in its name, as well as the generic type name, itself, using unqualified type name references. This also works to resolve unqualified type-name references to the type parameters specified in the generic object-type-name of successive USING statements. In addition, ABL resolves unqualified type-name references to all the constructed generic types that can be defined for a given namespace specified in a USING statement. For example:
  | 
       /* 1 */ USING System.Windows.Forms.*.
        /* Button is resolved by the first USING statement */ /* 2 */ USING "System.Collections.Generic.List<Button>". /* 3 */ USING System.Collections.ObjectModel.*. /* List and Button are resolved by the first two USING statements */ DEFINE VARIABLE ButtonList AS CLASS "List<Button>" NO-UNDO. /* "Collection<INTEGER>" is resolved by the third USING statement */ DEFINE VARIABLE intColl AS CLASS "Collection<INTEGER>" NO-UNDO. /* However, this line does not compile */ DEFINE VARIABLE stringList AS CLASS "List<CHARACTER>" NO-UNDO. | 
 ABL does not validate the definition of type names, packages, or namespaces during USING statement compilation. When ABL later encounters an unqualified object type name following the compilation of all USING statements, it validates this type name against each available object-type-name, package-name, and namespace specified by these USING statements to identify and verify the type definition.
ABL does not validate the definition of type names, packages, or namespaces during USING statement compilation. When ABL later encounters an unqualified object type name following the compilation of all USING statements, it validates this type name against each available object-type-name, package-name, and namespace specified by these USING statements to identify and verify the type definition.
   During procedure or class definition file compilation, ABL resolves all unqualified type name references according to the following algorithm:
During procedure or class definition file compilation, ABL resolves all unqualified type name references according to the following algorithm:
   If FROM ASSEMBLY is specified, ABL searches for object-type-name in the loaded assemblies.
If FROM ASSEMBLY is specified, ABL searches for object-type-name in the loaded assemblies.
   If FROM PROPATH is specified, ABL checks if object-type-name specifies a built-in class or interface type, and if not, ABL searches for a corresponding class file according to the object-type-name package relative to PROPATH.
If FROM PROPATH is specified, ABL checks if object-type-name specifies a built-in class or interface type, and if not, ABL searches for a corresponding class file according to the object-type-name package relative to PROPATH.
   If no FROM option is specified, ABL checks if object-type-name specifies built-in class or interface type, and if not, ABL first searches for a corresponding class file according to the object-type-name package relative to PROPATH, then searches for object-type-name in the loaded assemblies.
If no FROM option is specified, ABL checks if object-type-name specifies built-in class or interface type, and if not, ABL first searches for a corresponding class file according to the object-type-name package relative to PROPATH, then searches for object-type-name in the loaded assemblies.
   If FROM ASSEMBLY is specified, ABL searches for object-type-name in the loaded assemblies.
If FROM ASSEMBLY is specified, ABL searches for object-type-name in the loaded assemblies.
   If FROM PROPATH is specified, ABL checks if object-type-name specifies a built-in class or interface type, and if not, ABL searches for a corresponding class file according to the object-type-name package relative to PROPATH.
If FROM PROPATH is specified, ABL checks if object-type-name specifies a built-in class or interface type, and if not, ABL searches for a corresponding class file according to the object-type-name package relative to PROPATH.
   If no FROM option is specified, ABL checks if object-type-name specifies built-in class or interface type, and if not, ABL first searches for a corresponding class file according to the object-type-name package relative to PROPATH, then searches for object-type-name in the loaded assemblies.
If no FROM option is specified, ABL checks if object-type-name specifies built-in class or interface type, and if not, ABL first searches for a corresponding class file according to the object-type-name package relative to PROPATH, then searches for object-type-name in the loaded assemblies.