我希望你能够将一个枚举继承到另一个枚举中:
例如:
例如:
Type TMyTypeKind = (TTypeKind, enBoolean, enPath);
Type TMyTypeKind = (TTypeKind, enBoolean, enPath);
类似的做法也可以反过来实现。如果你知道所有可能的值,将其定义为基本类型并声明其子范围类型。这些子范围将与基本类型和彼此之间都可以进行赋值兼容。这可能有益也可能无益。
type
TEnumAll = (enFirst, enSecond, enThird, enFourth, enFifth);
TEnumLower = enFirst..enThird;
TEnumMore = enFirst..enFourth;
procedure TForm1.Test1;
var
All: TEnumAll;
Lower: TEnumLower;
begin
for All := Low(TEnumAll) to High(TEnumAll) do begin
Lower := All;
end;
for Lower := Low(TEnumLower) to High(TEnumLower) do begin
All := Lower;
end;
end;
使用Include文件的技巧可以实现这一点。例如:
AdCommonAttributes.inc
canonicalName,
cn,
whenCreated,
description,
displayName,
distinguishedName,
instanceType,
memberOf,
modifyTimeStamp,
name,
objectCategory,
objectClass,
objectGuid,
showInAdvancedViewOnly
AdUserGroupCommonAttributes.inc:
msDSPrincipalName,
objectSid,
sAMAccountName
AdUserAttributers.inc:
accountExpires,
badPasswordTime,
badPwdCount,
c,
comment,
company,
department,
division,
employeeID,
givenName,
homeDirectory,
homeDrive,
lastLogon,
lockoutTime,
logonCount,
pwdLastSet,
sn,
telephoneNumber,
tokenGroups,
userAccountControl,
userPrincipalName
单元 AdUserGroupCommonAttributes;
TAdUserGroupCommonAttributes = (
{$I AdCommonAttribs.inc}, {$I AdUserGroupCommonAttributes.inc}
);
单位广告组属性;
type
TAdGroupAttributes = (
{$I AdCommonAttribs.inc},
{$I AdUserGroupCommonAttributes.inc},
{$I AdGroupAttributes.inc}
);
单元 AdUserAttributes;
type
TAdUserAttributes = (
{$I AdCommonAttribs.inc},
{$I AdUserGroupCommonAttributes.inc},
{$I AdUserAttributes.inc}
);
Type TMyTypeKind = (enBoolean = High(TTypeKind) + 1, enPath = High(TTypeKind) + 2);
所以您可以拥有一个从Low(TTypeKind)开始到High(TMyTypeKind)结束的索引号。
看看这个例子:Ord(enBoolean)
很抱歉,这是完全不可能的。你无法对此做任何事情,我很抱歉。
当你输入:
Type TMyTypeKind = (TTypeKind, enBoolean, enPath);
Delphi会发现TTypeKind
已经是一个类型,并且会给出以下错误:
[DCC Error] xxx.pas(41): E2004 Identifier redeclared: 'TTypeKind'
正如之前所说,你是做不到的。 但你可以这样做:
TBaseState = class
public const
stNone = 1;
stSingle = 2;
end;
TMyState = class(TBaseState)
public const
stNewState = 3;
end;
var
state: TMyState;
begin
ShowMessage(IntToStr(s.stNewState));
end;
虽然它与枚举不同,但有时它会有所帮助。