gpt4 book ai didi

.net - 双重继承和抽象方法

转载 作者:行者123 更新时间:2023-12-04 18:15:11 24 4
gpt4 key购买 nike

我有一个继承了两次的基地。第二个子类没有为方法克隆提供任何签名,但第三个子类提供并定义方法克隆如下。

  TControlObject = abstract class
...
public
method Clone:TControlObject; virtual; abstract;
end;

TGateControl = class(TControlObject)
...
public
...
end;

TAndControl = class(TGateControl)
public
method Clone:TControlObject; override;
end;

但是,编译器会引发错误,即 TGateControl 类不提供克隆方法的实现。由于 TGateControl 是从 TControlObject 继承的,而 TAndControl 类是从 TGateControl 继承的,因此应该自动为基类 clone 方法覆盖方法 clone。我对吗?

提前致谢,

最佳答案

您有 abstract TControlObject 中克隆方法的属性.这意味着任何直接派生自 TControlObject 的类必须提供 Clone 方法的实现(见 MSDN abstract)。因此,TGateControl 必须提供克隆的实现。如果 TControlObject那么有一个克隆的具体实现,是的,它不需要被覆盖。

所以一些选择是:

  • 删除 abstract克隆上的属性。
  • 添加 Clone 的实现在 TControlObjectTGateControl .

  • 澄清一下,这些方法永远不会“自动覆盖”。派生类能够调用基类的实现,但是说派生类“自动覆盖”了基类的实现是不正确的。

    关于.net - 双重继承和抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11887033/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com