【发布时间】:2013-02-06 02:30:09
【问题描述】:
我在实现某些类之间的关系时遇到问题。我得到了三个不同的课程,提供三种不同的形式。所有这些类都使用相同的语言,因此它们继承自同一个名为TAncestorServer 的类。我们称它的后代为TForm1Server、TForm2Server 和TForm3Server。 TAncestorServer 包含一个名为Function1 的抽象方法,因此TForm1、TForm2 和TForm3 可以通过从它继承的自己的类毫无问题地调用它,它们可以通过名为的属性访问这些类Server。但问题在于另一种形式,称为TForm4!它与其他形式非常相似,但不像它们那样独立。它适用于TForm2Server 或TForm3Server。仍然不是问题,但想象另一种方法,如Function2,在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 不是IForm4Server,这是绝对正确的。 TForm1Server 不知道如何实现 Function2,必须将其留空。我也不能将TForm4.Server 声明为IForm4Server,因为Function1 代表了大量的方法和属性,但是我仍然无法将IForm4Server 类型转换为TAncestorServer。
作为一种解决方案,我可以在TForm4 中定义两个不同的属性,例如GeneralServer: TAncestorServer 和Form4Server: IForm4Server,然后将TForm2Server 或TForm3Server 的相同实例分配给它们,但我对此感觉不太好。我该怎么做?它有什么标准模式吗?
【问题讨论】:
-
关于你的问题的标题,接口不是你类的祖先。 Delphi 仅支持单继承(您似乎知道),因此每个班级只有一个父亲/祖父......等等。因此,您只能从祖先那里继承方法。您的类可以实现任意数量的接口,但这些接口不是您的类的祖先,只是它实现的接口。
-
感谢指正。我在使用界面和用英语提问方面都是新手!任何建议将不胜感激。
标签: delphi oop interface multiple-inheritance