A .NET type can define one or more nested (inner) types as members, typically as inner classes or (more rarely) as inner interfaces. Inner classes are typically defined and often instantiated only within the context of the defining class, and inner interfaces are typically defined only within the context of a defining interface. However, inner classes and interfaces support the same features as a normal class or interface, and an ABL application can reference any .NET inner classes and interfaces that are public.
You can reference the full type name for an inner class or interface using the following syntax for combining the defining class or interface type name and a member inner class or interface name:
Syntax
type-name+inner-class-or-interface-name
The type-name is any supported .NET class or interface type and inner-class-or-interface-name represents the name of a given inner class or interface that is defined within its defining class or interface.
In .NET languages, the type name of a class and the type name of one of its inner classes are separated by a dot (.) instead of a plus (+), as in ABL. The same is true for interface type names and the names of their defined inner interfaces. When you look up an inner class or interface in the Microsoft .NET class library documentation, note that its name appears under the same namespace and follows the name of its defining class or interface. You can identify an inner class or interface in this list because it is specified using the class-or-interface-name.inner-class-or-interface-name syntax, where class-or-interface-name is the name of the defining class or interface and inner-class-or-interface-name is the name of the defined inner class or interface. Normally (for a non-inner class), no dot (.) appears in the class name.
Note that whether you can instantiate or only reference an existing instance of a public inner class depends on the semantics of the defining class. For more information, see the .NET documentation for nested classes of the defining class.