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. 德爾福 - 如何讓枚舉
- 4. 德爾福2010 RTTI:探索枚舉
- 5. 德爾福 - 與泛型接口繼承
- 6. 德爾福DFM繼承的問題
- 7. 德爾福XE舉報人
- 8. 枚舉和繼承
- 9. 枚舉的繼承
- 10. 枚舉的繼承
- 11. 繼承或枚舉
- 12. 德爾福棱鏡,如何聲明枚舉
- 13. 演員int值的枚舉德爾福棱鏡
- 14. 德爾福在REST服務器枚舉類型
- 15. 德爾福 - 如何枚舉字符串來鍵入
- 16. 枚舉類模糊繼承
- 17. 繼承中的枚舉
- 18. .NET枚舉繼承替代
- 19. 枚舉繼承,或類似
- 20. 的Java枚舉繼承
- 21. 繼承枚舉值java
- 22. 德爾福v.Word - 如何從德爾福
- 23. 德爾福HID Delphi7和德爾福XE2
- 24. 德爾福繼承創建一個從TObject的
- 25. 德爾福:適當的時間來繼承和恢復控件?
- 26. 如何inherite德爾福DLL中的自定義窗體(可視化繼承)在我德爾福項目
- 27. 德爾福JEDI安裝程序生成4197不承認2007年德爾福
- 28. 德爾福
- 29. 與德爾福
- 30. 與德爾福
以什麼方式指出需要這樣做?枚舉只是一系列有序的遞增序數常量。你不能從枚舉繼承。有沒有允許你從枚舉繼承的編程語言?我不知道。 Java和C#也不允許它。 http://stackoverflow.com/questions/55375/add-values-to-enum – 2012-03-20 14:14:12