Hallo,
folgendes Beispiel:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 =
class(TForm)
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
TBigClass =
class(TObject)
function ReallyDoIt: boolean;
virtual;
procedure DoSomething;
end;
TSmallClass =
class(TBigClass)
function ReallyDoIt: boolean;
override;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TBigClass.ReallyDoIt: boolean;
begin
result := false;
end;
procedure TBigClass.DoSomething;
var NewBigClass: TBigClass;
begin
if ReallyDoIt
then
begin
ShowMessage('
Los gehts!');
NewBigClass := TBigClass.Create;
NewBigClass.DoSomething;
NewBigClass.Free;
end;
end;
function TSmallClass.ReallyDoIt: boolean;
begin
result := false;
if random(2) = 1
then
result := true;
end;
end.
Wenn ich nun TSmallClass.DoSomething aufrufe, bekomme ich mit einer Wahrscheinlichkeit von ca. 50% die Meldung 'Los gehts!' gezeigt. Danach wird eine Instanz von T
BigClass konstuiert und deren DoSomething aufgerufen, die wiederum TBigClass.ReallyDoIt abfragt, die ihrerseits immer false zurückgibt. Kurz: Ich werde nie zweimal 'Los gehts!' angezeigt bekommen.
Um das zu erreichen, müsste TBigClass.DoSomething eine TSmallClass konstruieren, wenn sie als "TSmallClass.DoSomething" aufgerufen wird. Kann man das irgendwie implementieren?
Vielen Dank schon mal! Hoffentlich war das verständlich..