这个在Delphi中调用的“循环继承”是什么?

时间:2016-08-02 15:04:23

标签: delphi inheritance

前几天我看到了这样的代码:

2.8     3.0   1
28.4    3.0   1
36.2    3.0   1
70.49   3.0   1
85.19   3.0   1
儿子从继承自儿子的父继承而来。 搜索循环继承但仅搜索Java结果。

这叫什么?

4 个答案:

答案 0 :(得分:5)

示例代码(现在已被删除)并不能完成你的想法。您看到TMycxGridDBTableView被定义为TcxGridDBTableView的后代,然后您会看到TcxGridDBTableView,定义为TcxGridDBTableView的后代。

但是,您在顶部看到的TcxGridDBTableView与您稍后看到的TcxGridDBTableView不同。第一个是指在别处宣布的类,在其他一些单元中。下一个例子是在这个单元中声明一个 new 类,该单元恰好与其他单元的类具有相同的基本名称。

此技术称为插入类。它曾用于引入新的GetViewDataClass方法,但最终仍然使用相同的类名。使用具有该名称的控件的表单将使用该类的新版本而不是原始版本。这是一种自定义VCL控件的方法,无需编译和安装自定义包。

答案 1 :(得分:4)

无意义。你可以让TSon拥有类型为TFather的属性,使用具有属性TSon的TFather,但你所写的内容纯属无意义。

以下是有道理的,但没有特殊术语,因为没有递归:

type
  TFather = class;
  TSon = class
    public
      Father : TFather;
  end;
  TFather = class
    public
       Son : TSon;
  end;

答案 2 :(得分:3)

我不知道它叫什么,但它没有意义。这根本不可能。

如果我尝试编译此代码:

type
  TFather = class;
  TSon = class(TFather)
  end;
  TFather = class(TSon)
  end;

我明白了:

[dcc32 Error] Project1.dpr(12): E2086 Type 'TFather' is not yet completely defined

,这是预期的。

Java中的循环继承是一个错误条件。如果像这样的事情是直接或间接发生的(即中间有几个类),你会得到一个诊断提及“循环继承”。换句话说,它不是一个编程概念,它是一个错误条件。

答案 3 :(得分:1)

  

这叫什么?

技术术语是语法错误。此代码是非法的。