关于delphi枚举类型的调用的问题?谢谢大家

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于delphi枚举类型的调用的问题?谢谢大家相关的知识,希望对你有一定的参考价值。

type Minerals=(Ca,P,Mg,Cl,K,Na,Su,Co,Cu,I,Fe,Mn,Se,Zn,Mo,VitA,VitD,VitE);
这是一个枚举类型,我想在函数中调用枚举类型中某一个值(例如ca):
with ca do
end;
我想用枚举类型表示上面的语句怎么写?
with minerals(1) do
end; 可以这样吗?

没明白你的意思,我理解的with用法都是用在结构或者类中,你使用with 枚举变量 do的意义何在?
另外,对于枚举变量如果你确切知道其值,例如你例子中的Ca = 1,则使用minerals(1)表示Ca应该没有问题,不过你定义的枚举变量的名称太容易和变量重复,会引起不可预料的编译错误,建议前面加上前缀码,比如:Ca -> Mini_Ca,I -> Mini_I等
如果在赋值中需要和Integer转换,还可以使用Ord函数,取得枚举变量在枚举序列中的位置信息,当然也可以强制转换。
参考技术A type Minerals=(Ca,P,Mg,Cl,K,Na,Su,Co,Cu,I,Fe,Mn,Se,Zn,Mo,VitA,VitD,VitE);
var
//定义变量
temMinerals :Minerals;
begin
//赋值
temMinerals := Ca;
//判断
if temMinerals =Ca then
begin
//...
showMessage('Ca');
end else
begin
showMessage('xx')
//...
end;

end;
参考技术B 不可以
with minerals[1] do
end;

Joshua Bloch 在 Effective Java 中解释的枚举类型

【中文标题】Joshua Bloch 在 Effective Java 中解释的枚举类型【英文标题】:Enum Types as explained in Effective Java by Joshua Bloch 【发布时间】:2015-07-14 19:06:02 【问题描述】:

请看这个link。关于枚举,Bloch 先生说

Java 的枚举类型是为每个类型导出一个实例的类 通过公共静态最终字段枚举常量。

我阅读了枚举类文档但是没有没有公共静态最终字段,那么上面的说法如何成立。请解释。 谢谢

【问题讨论】:

编译器为您创建公共静态最终字段。尝试使用 javap 反编译类。 【参考方案1】:

创建Test.java文件并写入Test enum

public enum Test 
    Hello

编译这个类:javac Test.java,使用javap Test得到编译后的类:

public final class Test extends java.lang.Enum
    public static final Test Hello;
    public static Test[] values();
    public static Test valueOf(java.lang.String);
    static ;

您可以看到Test 类从Enum 扩展而来,并且它具有public static final Hello 字段。

【讨论】:

【参考方案2】:

枚举是所有枚举的基类。它不包含常量。包含常量的是具体的枚举类本身。参见例如documentation for the enum Locale.Category。它确实包含每个枚举常量的公共静态最终字段:DISPLAY 和 FORMAT。

【讨论】:

以上是关于关于delphi枚举类型的调用的问题?谢谢大家的主要内容,如果未能解决你的问题,请参考以下文章

delphi 枚举类型

delphi中枚举类型和子界,数组,集合的详解以及类型说明

在 Delphi 中是不是可以将枚举合并为更大的枚举?

Delphi基础-数据类型

DELPHI中枚举类型数据的介绍和使用方法

delphi中的函数传参如何传枚举参数?