In this article, Scott Water pointed out that you can instantiate an object using generics.
For everyone out there who didn't know, you can already accomplish this, back in Delphi 1! It's called class referencing. For those of you C# people, you can find this in the Delphi Language Reference under “Constructors and class references”. This appeared in the Delphi 5 help.
type TControlClass = class of TControl;function CreateControl(ControlClass: TControlClass; const ControlName: string; X, Y, W, H: Integer): TControl;begin Result := ControlClass.Create(MainForm); with Result do begin Parent := MainForm; Name := ControlName; SetBounds(X, Y, W, H); Visible := True; end;end;
CreateControl(TEdit, 'Edit1', 10, 10, 100, 20);
In 2017, with the release of Delphi 10.2 Tokyo, Embarcadero introduced a specialized implementation of the Observer pattern into the System.Classes unit. While it has been in the wild for 9 years, it remains a "hidden" architecture for many, primarily because it serves as the invisible engine behind LiveBindings. Other than live bindings, you can also use the Observer pattern as a way to update component settings to the Windows registry, an .ini file, or persist it elsewhere.
System.Classes