我目前有一個與屬性一起使用的選項管理,它使用所有相同的getter/setter方法,但使用索引。將整數轉換爲屬性獲取器/設置器中的枚舉
這適用於Ints和Bools,但我想爲枚舉工作。
TIntegerOptions = (kInt1, kInt2, kInt3);
class property Integer1: Integer index kInt1 read GetOptionsValueInt write SetOptionsValueInt;
class property Integer2: Integer index kInt2 read GetOptionsValueInt write SetOptionsValueInt;
class property Integer3: Integer index kInt3 read GetOptionsValueInt write SetOptionsWertInt;
FOptionsListInt: array[TIntegerOptions] of IniIntObject; // Objects contain Inifile read&save functionalities
...
class function GetOptionsValueInt(const aOption: TIntegerOptions) : Integer
begin
Result := Ord(FOptionsListInt[aOption].GetValue());
end;
class procedure SetOptionsValueInt(const aOption: TIntegerOptions; const aValue: Integer);
begin
FOptionslistInt[aOption].ChangeTo(aValue);
end;
這是工作,到目前爲止,現在我的問題:
TEnumOptions = (kEnum1, kEnum2, kEnum3);
TEnum1 = (e1o1, e1o2, e1o3);
TEnum2 = (e2o1, e2o2, e2o3);
TEnum3 = (e3o1, e3o2, e3o3);
// these props fail because my functions return/excpect Integers, not the matching Enums
class property Enum1: TEnum1 index kEnum1 read GetOptionsValueInt write SetOptionsValueEnum;
class property Enum2: TEnum2 index kEnum2 read GetOptionsValueInt write SetOptionsValueEnum;
class property Enum3: TEnum3 index kEnum3 read GetOptionsValueInt write SetOptionsValueEnum;
FOptionsListEnum: array[TEnumOptions] of IniIntObject; // Objects contain Inifile read&save functionalities
標誌着我在代碼中的問題。我可以以某種方式將由getters/setters返回的Integer值轉換爲每個屬性的匹配枚舉值?
對於那些閱讀舊問題的人:
我決定只是對枚舉使用相同的getter/setter,因爲最後他們也會保存爲整數。如果我需要以某種方式投入獲取者,我會再次添加它們,但我希望在屬性聲明內部提供解決方案。
對不起,我會添加更多的代碼,以便儘快解釋問題 –
@David Heffernan:OP能否遺漏允許使用枚舉類型作爲函數的構造?我的意思是函數GetEnum(Value:Integer):TAnEnum;開始 結果:= TAnEnum(Value); 結束; – MartynA
你是對的,setter中的代碼完全關閉了 - 自己有點困惑。我會去一臺電腦(剛剛在線與移動),並更新問題,與moee代碼和假名稱,所以它變得更容易理解 - atm它真的很亂,對此表示歉意 –