私は非常に大きなデルファイサードパーティのライブラリをソースコードなしで使用していますが、このライブラリには抽象メソッドを持ついくつかのクラスがあります。私は、EAbstractError: Abstract Error
を避けるためにabtractメソッドが実行時にDescendクラスによっていつ実装されるかを決定し、ユーザにカスタムメッセージを表示するか、代わりに別のクラスを使用する必要があります。抽象メソッドが実装されているかどうかはどのように判断できますか?
たとえば、このコードでは、実行時にMyAbstractMethod
が実装されているかどうかチェックしたいと考えています。
type
TMyBaseClass = class
public
procedure MyAbstractMethod; virtual; abstract;
end;
TDescendantBase = class(TMyBaseClass)
public
end;
TChild = class(TDescendantBase)
public
procedure MyAbstractMethod; override;
end;
TChild2 = class(TDescendantBase)
end;
実行時に抽象メソッドがDescendantクラスに実装されているかどうかを判断する方法はありますか。
このように使用すると、各クラスの種類ごとに関数を実装する必要があり、私はより一般的な解決策を先験します。 – Salvador
あなたのコードが正しいかどうかわかりません。 'ImplementsAbstractMethod(TChild2.Create)'はtrueを返しますが、 'TChild2'も' TDescendantBase'も 'TMyBaseClass'の抽象的な' MyAbstractMethod'をオーバーライドしません。 http://pastebin.com/JufNPJkg –
@rinntech:ヘッドアップありがとう。正しいコードで答えを更新しました。 –