Q
枚举继承德尔福
2
A
回答
4
你不能。编译器不知道如何解释这个。从wiki:
An enumerated type defines an ordered set of values by simply listing identifiers that denote these values. The values have no inherent meaning.
1
恐怕这是不可能的。那里有没有什么可以做这件事,我很抱歉,
如果键入:
Type TMyTypeKind = (TTypeKind, enBoolean, enPath);
德尔福将看到TTypeKind
已经是一个类型,它会给你后续的错误:
[DCC Error] xxx.pas(41): E2004 Identifier redeclared: 'TTypeKind'
3
这是不可能的,因为枚举的名称应该是唯一的。 您不能在另一个枚举中使用TTypeKind的值,它会产生冲突。
但是在Delphi 2009中有一个称为范围枚举的特性。 你可以说TMyTypeKind.enBoolean。
但是这并没有解决继承问题。
一种方法是整型常量分配给枚举值:
Type TMyTypeKind = (enBoolean = High(TTypeKind) + 1, enPath = High(TTypeKind) + 2);
所以,你可以有低(TTypeKind)开始的索引号,并在高(TMyTypeKind)结束
看到它对于你自己:Ord(enBoolean)
3
它可以用一个绝招来完成,使用包含文件。例如:
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}
);
unit AdGroupAttributes;
type
TAdGroupAttributes = (
{$I AdCommonAttribs.inc},
{$I AdUserGroupCommonAttributes.inc},
{$I AdGroupAttributes.inc}
);
unit AdUserAttributes;
type
TAdUserAttributes = (
{$I AdCommonAttribs.inc},
{$I AdUserGroupCommonAttributes.inc},
{$I AdUserAttributes.inc}
);
1
正如它已经说过,你不能。 但你可以做到这一点的方法:
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;
,并不是与枚举相同,但有时它帮助。
4
以相反的顺序可能出现类似情况。如果您知道所有可能的值,请将其定义为基本类型并声明它的子范围类型。子范围将与基本类型和彼此兼容。它可能会或可能不会带来好处。
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;
相关问题
- 1. 德尔福和枚举
- 2. 德尔福7继承
- 3. 德尔福2010 RTTI:探索枚举
- 4. 德尔福 - 如何让枚举
- 5. 枚举的继承
- 6. 继承或枚举
- 7. 枚举和继承
- 8. 德尔福棱镜,如何声明枚举
- 9. 德尔福在REST服务器枚举类型
- 10. 演员int值的枚举德尔福棱镜
- 11. 枚举继承,或类似
- 12. 的Java枚举继承
- 13. 德尔福HID Delphi7和德尔福XE2
- 14. 德尔福v.Word - 如何从德尔福
- 15. 德尔福继承创建一个从TObject的
- 16. 德尔福:适当的时间来继承和恢复控件?
- 17. 德尔福JEDI安装程序生成4197不承认2007年德尔福
- 18. DES_KEY_SZ德尔福
- 19. 德尔福Application.HintColor
- 20. 德尔福
- 21. 德尔福
- 22. 与德尔福
- 23. 德尔福
- 24. 德尔福:TRegExpr
- 25. 类德尔福
- 26. Python 3枚举:枚举继承另一个枚举不起作用?
- 27. 德卡尔和德尔福2009年
- 28. 创建德尔福
- 29. 德尔福在Vista
- 30. 德尔福的TQuery
以什么方式指出需要这样做?枚举只是一系列有序的递增序数常量。你不能从枚举继承。有没有允许你从枚举继承的编程语言?我不知道。 Java和C#也不允许它。 http://stackoverflow.com/questions/55375/add-values-to-enum – 2012-03-20 14:14:12