私は、他の一つにenumarationをinheriteする探しています:列挙継承デルファイ
例えば:
Type TMyTypeKind = (TTypeKind, enBoolean, enPath);
私は、他の一つにenumarationをinheriteする探しています:列挙継承デルファイ
例えば:
Type TMyTypeKind = (TTypeKind, enBoolean, enPath);
あなたはできません。コンパイラはこの解釈方法を知らない。 wikiから:
An enumerated type defines an ordered set of values by simply listing identifiers that denote these values. The values have no inherent meaning.
私はこれが全くできません怖いです。 Theresのあなたがそれについてできることは何も、私は申し訳ありませんが、
次のように入力:
Type TMyTypeKind = (TTypeKind, enBoolean, enPath);
DelphiはTTypeKind
が既にタイプであり、それはあなたのフォローエラーを与えることがわかります。
[DCC Error] xxx.pas(41): E2004 Identifier redeclared: 'TTypeKind'
列挙された名前が一意である必要があるため、これは不可能です。 TTypeKindの値を別の列挙体で使用することはできません。競合が発生します。
しかし、Delphi 2009ではスコープ付き列挙型と呼ばれる機能があります。 TMyTypeKind.enBooleanと言うことができます。
しかし、これは継承を解決しません。
一つの方法は、列挙型の値に整数定数を割り当てることです:
Type TMyTypeKind = (enBoolean = High(TTypeKind) + 1, enPath = High(TTypeKind) + 2);
だからあなたが低(TTypeKind)で始まるインデックス番号を持つことができ、
それを参照してくださいハイ(TMyTypeKind)で終わりますOrd(enBoolean)
これは、ファイルをインクルード使用して、トリックを行うことができます。例:
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}
);
すでに述べたように、あなたはできません。 しかし、あなたはこの方法を行うことがあります。
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;
それは、列挙型と同じではありませんが、時にはそれが役立ちます。
逆の順序で同様のことが可能です。可能な値がすべてわかっている場合は、それを基本タイプとして定義し、それの部分範囲タイプを宣言します。サブレンジは、ベースタイプと相互に互換性があります。メリットがあるかもしれません。
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;
どのような方法でこれを行う必要があると指摘できますか?列挙型は、一連の昇順の序数定数の列です。 enumから継承することはできません。あなたがenumから継承することを可能にするプログラミング言語はありますか?私はそれを知らない。 JavaとC#はどちらも許可しません。 http://stackoverflow.com/questions/55375/add-values-to-enum –