私はこれらの2つのクラスを持っています:
type
TMyBaseClass = class
protected
FAllowDoSomething: Boolean; // initialized to False
procedure DoSomething; virtual;
end;
TMyChildClass = class(TMyBaseClass)
protected
procedure DoSomething; override;
end;
implementation
procedure TMyBaseClass.DoSomething;
begin
if not FAllowDoSomething then Exit; // Abort;
ShowMessage('TMyBaseClass: FAllowDoSomething is False. You wont see me!');
end;
procedure TMyChildClass.DoSomething;
begin
inherited; // Must inherit
// if not FAllowDoSomething then Exit; { I don't want to check here again }
ShowMessage('TMyChildClass: FAllowDoSomething is False but still I can see this message!');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TMyBaseClass.Create do try
DoSomething;
finally
Free;
end;
// if I use Abort in TMyBaseClass, the code will not get here
with TMyChildClass.Create do try
DoSomething;
finally
Free;
end;
end;
私はしTMyChildClass.DoSomething
なければなりませんinherited
がTMyBaseClass.DoSomething
、私はそれを尊重したいですif not FAllowDoSomething then <don't do anything>
。
で使用Abort
してみましたTMyBaseClass
が、それは良い考えではなく、呼び出しメソッドを壊すことに気付きました ( TForm1.Button1Click
);
にif not FAllowDoSomething then Exit
もう一度書くことなく、これを行う正しいアプローチは何ですかTMyChildClass
。