Generics constructor with parameter constraint?

后端 未结 5 1010
死守一世寂寞
死守一世寂寞 2020-12-11 02:54
TMyBaseClass=class
  constructor(test:integer);
end;

TMyClass=class(TMyBaseClass);

TClass1=class()
  public
    FItem: T;
    pr         


        
5条回答
  •  旧巷少年郎
    2020-12-11 03:00

    type
      TBase = class
        constructor Create (aParam: Integer); virtual;
      end;
    
      TBaseClass = class of TBase;
    
      TFabric = class
        class function CreateAsBase (ConcreteClass: TBaseClass; aParam: Integer): TBase;
        class function CreateMyClass(aParam: Integer): T;
      end;
    
      TSpecial = class(TBase)
      end;
    
      TSuperSpecial = class(TSpecial)
        constructor Create(aParam: Integer); override;
      end;
    
    class function TFabric.CreateAsBase(ConcreteClass: TBaseClass; aParam: Integer): TBase;
    begin
      Result := ConcreteClass.Create (aParam);
    end;
    
    class function TFabric.CreateMyClass(aParam: Integer): T;
    begin
      Result := CreateAsBase (T, aParam) as T;
    end;
    
    // using
    var
      B: TBase;
      S: TSpecial;
      SS: TSuperSpecial;
    begin
      B := TFabric.CreateMyClass  (1);
      S := TFabric.CreateMyClass  (1);
      SS := TFabric.CreateMyClass  (1);
    

提交回复
热议问题