一部のクラス間の関係の実装に問題があります。私は、3 つの異なるフォームを提供する 3 つの異なるクラスを取得しました。これらのクラスはすべて同じ言語を話すため、 という同じクラスから継承されTAncestorServer
ます。TForm1Server
その子孫を 、TForm2Server
、 と呼びましょうTForm3Server
。TAncestorServer
と呼ばれる抽象メソッドが含まれているFunction1
ためTForm1
、TForm2
、TForm3
から継承された独自のクラスを介して問題なく呼び出すことができ、 という名前のプロパティを介してクラスにアクセスできますServer
。しかし、問題はTForm4
!と呼ばれる別の形式に関するものです。他のフォームと非常に似ていますが、それらのように独立していません。TForm2Server
またはで動作しTForm3Server
ます。それでも問題はありませんが、Function2
which が宣言されているTForm2Server
ような別のメソッドを想像してみてくださいTForm3Server
、TForm4
それらを呼び出す必要があります。私はこのように行くことができます:
if Server is TForm2Server then
TForm2Server(Server).Function2
else if Server is TForm3Server then
TForm3Server(Server).Function2;
しかし、それは無限の if-else 句になる可能性があります! したがって、多重継承のようなものがここで役立つかもしれないと思いました。IForm4Server
を含むというインターフェイスを宣言しましたFunction2
。したがってTForm2Server
、 との両方からTForm3Server
継承します。私はこのようなものがうまくいくと思った:TAncestorServer
IForm4Server
If Server is IForm4Server then
IForm4Server(Server).Function2;
しかし、コンパイラはそうではないと考えています。 TAncestorServer
is notIForm4Server
であるため、有効な型キャストではないと言います。これは絶対に正しいです。TForm1Server
実装について何も考えておらずFunction2
、空白のままにしておく必要があります。は膨大な数のメソッドとプロパティを表すため、TForm4.Server
同様に宣言することはできませんが、への型キャストはまだできません。IForm4Server
Function1
IForm4Server
TAncestorServer
TForm4
解決策として、2 つの異なるプロパティを同様GeneralServer: TAncestorServer
に定義して、同じインスタンスまたはそれらForm4Server: IForm4Server
に割り当てることができますが、私はそれについて気分が良くありません。どうすればいいですか?そのための標準パターンはありますか?TForm2Server
TForm3Server