- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Delphi 7 中是否可以创建一个可以通过 Visual Form Inheritance 技术继承的抽象类?如果是这样,请提供一个例子。
任务是这样的。我想创建一个表单,作为其他两个表单的基本表单,这两个表单将继承该表单的所有属性。这两个继承表单将用于向数据库添加新内容(例如,创建产品项)并编辑该内容。所以,我想基本形式应该被认为是一个抽象类,它应该有“确定”和“取消”按钮以及所有继承类将共享的类似内容。嗯,它显然是一个抽象类,因为除了作为其他表单的基础之外,该表单没有其他用途。
这是一个简单的图表,可以使要点更清楚:
最佳答案
首先我们需要定义抽象类的含义。在我看来,有两个相互竞争的定义:
由于 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/
我是一名优秀的程序员,十分优秀!