なぜ以下のコードでは、「成功」ではなく「失敗」メッセージが表示されるのですか?基本クラスのクラスプロシージャは、子孫のオブジェクトをインスタンス化する必要がありますか?
背景:私は、所有者オブジェクトをインスタンス化して何かをしてから解放するクラス手続きを持っています。私は、子孫オブジェクトを持っている場合
しかし、このアプローチは動作しません。
子として呼び出すことができ、基本クラスでクラス手順を提供する方法上の任意の提案?これについて間違って考えていますか?最低限のダウン
Type
TBase = class(TObject)
Protected
Procedure Proc1; Virtual;
Public
Class Procedure MyClassProc;
end;
Class Procedure TBase.MyClassProc;
Var
Base: TBase;
begin
Base := TBase.Create;
Base.Proc1;
Base.Free;
end;
Procedure TBase.Proc1;
begin
Assert(FALSE, 'Failed');
end;
type
TChild = class(TBase)
protected
Procedure Proc1; Override;
end;
Procedure TChild.Proc1;
begin
ShowMessage('Succeeded');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TChild.MyClassProc;
end;
@mghie:こんにちは!早い時期に私はそのような質問を得ました!私は説明してみましょう:私は基本的なフォームをいくつかの特別なプロパティを列挙し、さまざまな継承されたフォームで、そのプロパティの1つは、統計的に.FRMファイルに記録されたフォームの種類でした。フォームを私のカストーンフォーム工場に登録することでした。登録のロジックは、子どもと共有するためのベースフォームのクラスにありました。フォームの種類を取得する唯一の方法は、それをインスタンス化して、それをフォーム "オブジェクト"から取得することでした。よろしく。 –