【问题标题】:Is multiple interface inheritance not supported by Lazarus?Lazarus 不支持多接口继承吗?
【发布时间】:2015-07-25 12:21:39
【问题描述】:

我在拉撒路写了一个小蛇游戏,我写的时候拉撒路抱怨

type
  ISegment = interface(IRenderable, IMover)
  end;

当我试图实现的时候是让 ISegment 成为一个 combined 接口,但它似乎不起作用。 Lazarus 不支持多接口继承吗?

【问题讨论】:

    标签: interface multiple-inheritance pascal lazarus


    【解决方案1】:

    该语言不支持多重继承。一个类不能派生自多个基类。一个接口不能派生自多个基本接口。

    但是,您可以做的是拥有一个实现多个接口的类。像这样:

    type
      TMyClass = class(TInterfacedObject, IFoo, IBar)
        ....
      end;
    

    【讨论】:

      【解决方案2】:

      确实如此,您只需要更好的阅读技巧来理解this(查看语法图,在遗产部分)。 class type identifier 没有声明为可选,但 implemented interface 可以。大致读作:

      "一个类可以扩展一个基类,实现尽可能多的接口。当一个接口即将实现时,基类也必须指定。反之则不适用,你可以完美拥有一个类扩展基类而不指定任何接口"

      【讨论】:

      • 我不确定这如何回答我的问题。我想创建一个名为ISegment 的接口,并且我想强制实现它的任何类也实现IMoverIRenderable
      • 我不是要创建一个实现多个接口的,我是在尝试创建一个interface,它是多个其他.
      • 啊,我明白了。在这种情况下,请在freepascal.org/docs-html/ref/refse39.html 页面上使用上述相同的方法。好吧,无论出于何种原因,语法图似乎都不允许这样做。
      【解决方案3】:

      答案是否定的,Pascal 不应该支持多重继承,所以我不明白为什么它应该为接口做不同的事情

      如上一个答案所述,您仍然可以在一个类中实现多个接口

      【讨论】:

      • 接口是多重继承的一种形式。
      • 对不起Marco,但问题是接口是否可以同时继承多个接口,答案是否定的,因为Pascal根本不支持多重继承。您不能说“接口是多重继承的一种形式”,因为即使您可以实现类似的东西,它也不是多重继承。如果它是一种“多重继承形式”,我就不需要在每次必须使用时实现来自接口的每个函数,根本没有代码重用(除其他外)。我的回答是正确的,但你的评论并不完全正确
      • 另外,请问您如何使用接口直接实现多接口继承?
      • Jade:抱歉,多重继承继承自两个层次结构。各种语言都有各种限制来处理由此产生的问题。在 Delphi 的案例中,他们选择了抽象接口。没有地方写到代码实际上必须被重写。是的,您实际上也可以继承代码,但是通过使用组合。例如见stackoverflow.com/questions/3483680/…
      • 因此,您正在对某些模拟或替代它的机制调用“多重继承”,但它们不是
      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2023-03-05
      • 2011-04-21
      • 1970-01-01
      • 2017-11-12
      相关资源
      最近更新 更多