program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses System.SysUtils;
type
TAnimal = (hund, katze, maus);
TStadtMusikantenChecker =
class
public class function checkIsInBremerStadtMusikanten(
const animal: TAnimal): Boolean;
virtual;
protected class function checkIsInBremerStadtMusikantenHook(
const animal: TAnimal): Boolean;
virtual;
end;
TStadtMusikantenCheckerSub =
class(TStadtMusikantenChecker)
protected class function checkIsInBremerStadtMusikantenHook(
const animal: TAnimal): Boolean;
override;
end;
class function TStadtMusikantenChecker.checkIsInBremerStadtMusikanten(
const animal: TAnimal): Boolean;
begin
case animal
of
TAnimal.hund: Result := True;
TAnimal.maus: Result := False
else
//raise EArgumentOutOfRangeException.Create(EmptyStr);
Result := checkIsInBremerStadtMusikantenHook(animal);
end;
end;
class function TStadtMusikantenChecker.checkIsInBremerStadtMusikantenHook(
const animal: TAnimal): Boolean;
begin
raise EArgumentOutOfRangeException.Create(EmptyStr);
end;
class function TStadtMusikantenCheckerSub.checkIsInBremerStadtMusikantenHook(
const animal: TAnimal): Boolean;
begin
case animal
of
TAnimal.katze: Result := True;
else
Result :=
inherited;
end;
end;
const
animal: TAnimal = TAnimal.hund;
begin
try
WriteLn( TStadtMusikantenChecker.checkIsInBremerStadtMusikanten(animal) );
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
ReadLn;
end.