How do you create a new instance of a class (or child thereof) when all you have is a source instance (object)?
Just to explain what I mean, I've created the example below where I want to copy a TField instance (or child thereof).
function CreateNewFieldInstance(const ASrcField: TField): TField
Result := ASrcField.Create(self);
// Wrong unfortunately, because Delphi unlike other languages doesn't create a new instance here,
// causing Result to end up being the same object as ASrcField.
The code inside the function can't assume the class to create is TField, because it may be TIntegerField or some other derivative.