Einzelnen Beitrag anzeigen

nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Unit "dynamisch" einbinden

  Alt 31. Jul 2014, 20:43
Du kannst die Funktionen in Les und LesSQL in Klassen auslagern. Zum Beispiel kannst du hier auch auf Vererbung zurückgreifen.

Delphi-Quellcode:
unit LesBase;

interface

type
  TLesBase = class
  public
    function LeseDatei(Name: String): String; virtual; abstract;
  end;

  TLesBaseClass = class of TLesBase;

implementation

end.
Delphi-Quellcode:
unit Les;

interface

uses
  LesBase;

type
  TLes = class(TLesBase)
  public
    function LeseDatei(Name: String): String; override;
  end;

implementation

function TLes.LeseDatei(Name: String): String;
begin
  ...
end;

end.
Delphi-Quellcode:
unit LesSQL;

interface

uses
  LesBase;

type
  TLesSQL = class(TLesBase)
  public
    function LeseDatei(Name: String): String; override;
  end;

implementation

function TLesSQL.LeseDatei(Name: String): String;
begin
  ...
end;

end.
Und in dem Wrapper kannst du dann im Constructor die entsprechende Les-Klasse übergeben.

Delphi-Quellcode:
unit Lese;

interface

uses
  LesBase;

type
  TLese = class
    constructor Create(ALesClass: TLesBaseClass);
    destructor Destroy; override;
  private
    FLesClass: TLesBaseClass;
  public
    function getDatei: Boolean;
  end;

implementation

constructor TLese.Create(ALesClass: TLesBaseClass);
begin
  FLesClass := ALesClass.Create;
end;

destructor TLese.Destroy;
begin
  FLesClass.Free;
  inherited;
end;

function TLese.getDatei: Boolean;
begin
  Result := Length(FLesClass.LeseDatei('...') > 0);
end;

end.
Anwendung:
Delphi-Quellcode:
unit Form1;

interface

...

implementation

uses
  Lese, Les, LesSQL;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  LesClass: TLesBaseClass;
begin
  case FUseClass of
    clLes:
      LesClass := TLes;
    clLesSQL:
      LesClass := TLesSQL;
  end;
  FLese := TLese.Create(LesClass);
  try
    if FLese.getDatei then
      ShowMessage('Juhu! \o/')
    else
      ShowMessage('Oh Noes! D:');
  finally
    FLese.Free;
  end;
end;

...

end.
Ungetestet. Aber das Prinzip sollte klar sein.

Geändert von nuclearping (31. Jul 2014 um 20:53 Uhr)
  Mit Zitat antworten Zitat