Other than the small set of object types that ABL does not allow you to use, or the mapped object types that ABL accesses only as ABL primitive types, you can access all .NET object types directly in ABL. For more information on those object types you cannot use, see Limitations of support for .NET classes.
ABL thus supports direct access to the following .NET object types:
Structures — Value types that ABL views and manages similar to .NET classes. Structure types correspond to certain user-defined aggregate types in .NET languages that are supported using syntax native to each .NET language. For example, C# and C++ use the struct keyword to begin a user-defined type definition that .NET implements as a structure type. All such native-language user-defined types are implemented as .NET structure types in the CLR, and all .NET structure types inherit from the .NET class, System.ValueType. Although .NET passes or assigns structure types by value, once you reference a structure in ABL, you can pass and assign object references to it like any other class instance. The only time a structure is passed or assigned by value within ABL is when you pass the object reference to a .NET method parameter or assign the object reference to or from a .NET object property, data member, or method return value. This can create some unique situations when exchanging structure values between the ABL and .NET context. For more information, see Support for .NET value types as objects.
Enumerations — Value types that ABL views and manages similar to .NET classes, and that can represent any one of a particular enumerated subset of values from an underlying .NET mapped data type. Each value of that mapped data type subset is represented as a named member of an enumeration type. Each .NET language provides its own syntax to define and reference enumerations. All .NET enumerations inherit from the System.Enum structure, which inherits from the System.ValueType class. Like structures, ABL allows you to reference .NET enumerations as objects that .NET passes by value. For more information, see Accessing and using .NET enumeration types. Also like structures, you can encounter unique situations when exchanging enumeration object values between the ABL and .NET context. For more information, see Support for .NET value types as objects.
Note: ABL does not support a native ABL type that is similar to a .NET enumeration.