unit Game.Base; interface uses System.Classes; type TCustomGame = class(TInterfacedPersistent) private FLocation: string; protected procedure Notify(const APropertyName: string); virtual; public class function GetGameName: string; virtual; abstract; constructor Create(const ALocation: string); virtual; procedure Load; virtual; abstract; procedure Save; virtual; abstract; property Location: string read FLocation; end; TCustomGameClass = class of TCustomGame; implementation uses System.Bindings.Helper, System.SysUtils; { TCustomGame } constructor TCustomGame.Create(const ALocation: string); begin inherited Create; FLocation := IncludeTrailingPathDelimiter(ALocation); end; procedure TCustomGame.Notify(const APropertyName: string); begin TBindings.Notify(Self, APropertyName); end; end.