modelOf()
On platforms that support more than one Object Model, the modelOf
system function returns a string value describing the object model of the passed type, currently one of Island
, Cocoa
, Swift
or COM
.
modelOf()
accepts as its single parameter the name of a specific type know at compile time or a generic type parameter in scope.
As a special use case, if modelOf()
is used in a [case
]/switch
statement inside a generic, the compiler will collapse the case statement so that at runtime, only the case specific to the current object model will execute without overhead, for any given concrete instantiation of the generic type.
type
ImmutableList<T> = public class(IEnumerable<T>, ICollection)
where T is unconstrained;
...
method IsEqual(Item1, Item2: T): Boolean;
begin
case modelOf(T) of
"Island": exit (Item1 as IslandObject).Equals(Item2 as IslandObject);
"Cocoa": exit (Item1 as CocoaObject).isEqualTo(Item2 as CocoaObject);
"Delphi": exit (Item1 as TObject).Equals(Item2 as TObject);
"Swift": exit (Item1 as SwiftObject).Equals(Item2 as SwiftObject);
else raise new Exception($"Unexpected objetc model {modelOf(T)}");
end;
end;
See Also
- Object Models
- Unconstrained Generics
typeOf()
System FunctionnameOf()
System Function