![]() |
1
13
正如Jim提到的,您可以使用类常量或枚举类型:
|
![]() |
2
12
见 http://edn.embarcadero.com/article/34324 (“Delphi 7之后的新Delphi语言特性”。 类常量会很好。从上面的链接:
|
![]() |
3
8
我个人在几个大型关键任务数据处理平台中广泛使用了tondrej的方法。枚举的好处是,它们可以在应用程序中轻松地传递,非常紧凑(序数类型),在case语句中工作得很好,并且是完全类型安全的。后一点对于维护很重要,因为删除或更改枚举值将导致编译错误(好好想想imho)。 有些问题需要注意:
如果您非常关心第一个gotcha,那么可以在lookup数组中使用一个记录,并在每个记录中包含枚举值,并验证单元初始化的顺序。在经常维护的任务关键型系统中,这多次节省了我的开支。这种方法还可以用于向每个值添加额外的元数据(非常方便的特性)。 祝你好运!
更新: 谢谢你的批评-你是绝对正确的,因为我正在解决 感知 作为问题背后的问题。下面是一个 许多的 更简单的方法是,如果您能够忍受这样的限制,即它必须只能在Delphi2007或更高版本中工作(可能在D2006中工作?)。很难摆脱那些关于向后兼容的烦人想法;)
这种方法很简单,与Java或.NET应用程序可能会有类似的感觉。使用语义与预期的一样,将与代码完成一起工作。一个重要的优点是,常量的作用域是记录级别的,因此不会像单元作用域类型那样与其他定义发生冲突。
只是为了好玩,我还修改了之前的方法,直接解决了原来的问题,得到了类似的结果。这次我使用了“模拟类属性”(参见 here )使用属性索引器。这显然比记录方法更为复杂,但保留了使用枚举值、集合、字符串的能力,并且还可以扩展以在需要时实现其他元数据功能。我相信这适用于Delphi版本,最早可以追溯到Delphi5 IIRC。 我在Delphi中创建了一个解析框架来处理 满的 IBM AFPDS 打印数据流语法。这种灵活性是我喜欢在德尔福工作的原因——它就像一把瑞士军刀;) |
![]() |
4
4
尽管你可以 班 或A 记录 真正地。但如果是 班 您可以添加 类函数 像@ mghie 建议,而只是从 常数数组 . 就我个人而言,我更喜欢在 常数数组 在 界面 而不是在 功能 尸体在 实施 .
当然,有很多方法可以做到这一点。 |
![]() |
5
3
在Delphi的所有版本中都可以这样做:
你可以随心所欲地使用它:
只有一个地方可以更改字符串,而且只涉及代码,没有运行时实例化。Delphi最新版本的新特性并不总是需要这样做… |
![]() |
6
2
除了Tondrej说的: 还可以声明记录常量:
通过组合
但是,我通常喜欢的方式需要初始化:
|
![]() |
7
1
您可以有一个记录类型的全局变量。记录类型必须为您拥有的每个状态都有一个字段。 您可以在 初始化 任何单元的一部分,调用在该单元中声明的过程或函数。您可以有一个单独的单元来专门完成这项工作,比如statustypes.pas。 在接口部分,您可以声明如下内容:
|
![]() |
Some1Else · 函数在Delphi中重新创建TForm 3 年前 |
![]() |
Agmcz · Delphi安卓库。so未安装(AAB) 3 年前 |
![]() |
nader · 如何使用delphi在web上提交表单 7 年前 |
![]() |
kwadratens · Delphi中的卡方分布函数代码 7 年前 |
|
user9672569 · 如何在完整的位图图像中绘制阴影效果? 7 年前 |
![]() |
mmmm · MSBuild(用于Delphi)Make-like功能 7 年前 |