gpt4 book ai didi

德尔福7 : an abstract class through VFI

转载 作者:行者123 更新时间:2023-12-03 04:28:39 25 4
gpt4 key购买 nike

在 Delphi 7 中是否可以创建一个可以通过 Visual Form Inheritance 技术继承的抽象类?如果是这样,请提供一个例子。

任务是这样的。我想创建一个表单,作为其他两个表单的基本表单,这两个表单将继承该表单的所有属性。这两个继承表单将用于向数据库添加新内容(例如,创建产品项)并编辑该内容。所以,我想基本形式应该被认为是一个抽象类,它应该有“确定”和“取消”按钮以及所有继承类将共享的类似内容。嗯,它显然是一个抽象类,因为除了作为其他表单的基础之外,该表单没有其他用途。

这是一个简单的图表,可以使要点更清楚:

enter image description here

最佳答案

首先我们需要定义抽象类的含义。在我看来,有两个相互竞争的定义:

  1. 抽象类是无法实例化的类。这是最常用的定义。
  2. 抽象类是包含多个抽象方法的类。

由于 Delphi 没有强制执行定义 1 的语言机制,因此定义 2 似乎是适用于该问题的定义。

问题的答案是包含抽象方法的类可以与视觉表单继承一起使用。

现代版本的 Delphi 确实允许您使用 abstract 关键字来修饰类。然而,这没有任何效果。您仍然可以实例化这样的类。据我了解,添加 abstract 关键字是为了 Delphi .net 编译器的利益。

同样,在现代版本的 Delphi 中,您可以将编译器配置为将具有抽象方法的类实例化视为编译错误。这可能是您在 Delphi 中可以得到的最接近定义 1 的结果。

但是,即使这样也不完全符合定义 1,因为这些类可以通过 RTTI 或虚拟构造函数实例化。实例化设计组件的机制就是一个完美的例子。

以这个类为例:

type
TForm1 = class(TForm)
public
procedure Boo; virtual; abstract;
end;

即使您将W2000构造包含抽象方法的实例选项设置为错误,您仍然可以让框架实例化该类。仅当您编写 TForm1.Create 时,编译器才会反对。

关于德尔福7 : an abstract class through VFI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928852/

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