[pascal]
TStateClass = Class
public
constructor Create; virtual;
destructor Destroy; override;
end;

TClassOfState = class of TStateClass;

TLevel1 = class(TStateClass)
private
FOldCapt: String;
public
constructor create; override;
destructor destroy; override;
end;

procedure TManagerClass.ChangeState(out State: TStateClass; StateClass: TClassOfState);
begin
....
State := StateClass.Create;
Self.Add(State);
end;
[/pascal]