Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Projektplanung und -Management (https://www.delphipraxis.net/85-projektplanung-und-management/)
-   -   Gleicher Prozedurenname - Anderer Parametertyp (https://www.delphipraxis.net/172964-gleicher-prozedurenname-anderer-parametertyp.html)

uligerhardt 30. Jan 2013 16:56

AW: Gleicher Prozedurenname - Anderer Parametertyp
 
Zitat:

Zitat von Getox (Beitrag 1201354)
Als Basisobjekt übergeben, mit "is" prüfen, was es ist und mit "as" als das, was es halt ist benutzen.

Fast. Richtig ist: Als Basisobjekt übergeben, mit "is" prüfen, was es ist, und mit "(...)" (harter Cast -
Delphi-Quellcode:
TEdit(obj)
) als das, was es halt ist, benutzen. :mrgreen:

DeddyH 30. Jan 2013 17:01

AW: Gleicher Prozedurenname - Anderer Parametertyp
 
Ich hab auch noch einen:
Delphi-Quellcode:
type
  TVater = class
  public
    procedure SayHello; virtual;
  end;

  TSohn = class(TVater)
  public
    procedure SayHello; override;
  end;

  TTochter = class(TVater)
  public
    procedure SayHello; override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure GetTask(Klasse: TVater);
  public
    { Public-Deklarationen }
  end;

...

procedure TVater.SayHello;
begin
  ShowMessage('Hallo von der Vaterklasse');
end;

procedure TSohn.SayHello;
begin
  ShowMessage('Hallo von der Sohnklasse');
end;

procedure TTochter.SayHello;
begin
  ShowMessage('Hallo von der Tochterklasse');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Vater: TVater;
  Sohn: TSohn;
  Tochter: TTochter;
begin
  Vater := TVater.Create;
  try
    GetTask(Vater);
  finally
    Vater.Free;
  end;
  Sohn := TSohn.Create;
  try
    GetTask(Sohn);
  finally
    Sohn.Free;
  end;
  Tochter := TTochter.Create;
  try
    GetTask(Tochter);
  finally
    Tochter.Free;
  end;
end;

procedure TForm1.GetTask(Klasse: TVater);
begin
  Klasse.SayHello;
end;

uligerhardt 30. Jan 2013 17:13

AW: Gleicher Prozedurenname - Anderer Parametertyp
 
Zitat:

Zitat von DeddyH (Beitrag 1201363)
Ich hab auch noch einen:
Delphi-Quellcode:
type
  TVater = class
  public
    procedure SayHello; virtual;
  end;

  TSohn = class(TVater)
  public
    procedure SayHello; override;
  end;

  TTochter = class(TVater)
  public
    procedure SayHello; override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure GetTask(Klasse: TVater);
  public
    { Public-Deklarationen }
  end;

...

procedure TVater.SayHello;
begin
  ShowMessage('Hallo von der Vaterklasse');
end;

procedure TSohn.SayHello;
begin
  ShowMessage('Hallo von der Sohnklasse');
end;

procedure TTochter.SayHello;
begin
  ShowMessage('Hallo von der Tochterklasse');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Vater: TVater;
  Sohn: TSohn;
  Tochter: TTochter;
begin
  Vater := TVater.Create;
  try
    GetTask(Vater);
  finally
    Vater.Free;
  end;
  Sohn := TSohn.Create;
  try
    GetTask(Sohn);
  finally
    Sohn.Free;
  end;
  Tochter := TTochter.Create;
  try
    GetTask(Tochter);
  finally
    Tochter.Free;
  end;
end;

procedure TForm1.GetTask(Klasse: TVater);
begin
  Klasse.SayHello;
end;

Das wird mir jetzt aber zu OO-orthodox. :mrgreen:

DeddyH 30. Jan 2013 17:14

AW: Gleicher Prozedurenname - Anderer Parametertyp
 
Ich dachte mir nur: wenn es eigene Klassen sind, wozu dann casten? ;)

Sir Rufo 30. Jan 2013 18:15

AW: Gleicher Prozedurenname - Anderer Parametertyp
 
Eine schicke Alternative hätte ich noch mit dem Visitor-Pattern in der Raabe-Edition :)

Achtung: Nur mit Delphi 2010 und aufwärts


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz