非常によく似たハードウェアの2つのバージョンを対象とするソフトウェアを作成していますが、APIを使用してハードウェアを初期化するまで、どのタイプが返されるかわかりません。
ハードウェアは非常に似ているため、いくつかの抽象メソッド(ハードウェアが異なる場合)を持つ親クラス(TParent)と、ハードウェアに依存する方法でそれらのメソッドを実装する2つの子クラス(TChildA、TChildB)を計画しました。
したがって、最初にTParentのオブジェクトをインスタンス化して、それがどの種類であるかを確認してから、正しい子にキャストします。
ただし、これを実行して、子クラスに完全に実装されている抽象メソッドの1つを呼び出すと、EAbstractErrorが発生します。
例えば:
myHardware:=TParent.Create();
if myHardware.TypeA then
myHardware:=TChildA(myHardware)
else
myHardware:=TChildB(myHardware);
myHardware.SomeMehtod();
親クラスを子クラスにキャストすることはできないと思います。また、これを行うにはおそらくもっと良い方法があると思います。ポインタはありますか?