2013-03-24 29 views
4

想法很簡單 - 讓TDictionary與類名TComponent使用在TDictionary中使用「class」?

for enum in vm.ClassNameToComponent do 
TLuaClassTemplate<enum.Value>.RegisterClass(vm.LS, PrintGlobal, container, vm); 

用枚舉,而不是

TLuaClassTemplate<TButton>.RegisterClass(vm.LS, PrintGlobal, container, vm); 
TLuaClassTemplate<TPanel>.RegisterClass(vm.LS, PrintGlobal, container, vm); 
TLuaClassTemplate<TEdit>.RegisterClass(vm.LS, PrintGlobal, container, vm); 
... 

,並使用從XML採取的類名的通用基礎類工作。
但是有問題:

TClassNameToComponentDict = TDictionary<string, TComponent>; 
... 
ClassNameToComponent: TClassNameToComponentDict; 
... 
    ClassNameToComponent := TClassNameToComponentDict.Create; 
    ClassNameToComponent.Add('TButton', TButton); 
    ClassNameToComponent.Add('TPanel', TPanel); 
    ClassNameToComponent.Add('TEdit', TEdit); 
... 

錯誤 「不兼容類型 'TComponent' 和 '類TButton的的'」。
如何使用TButton等「類」作爲通用值?

回答

5

您已經使用

TDictionary<string, TComponent> 

的類型表示從字符串一類的一個實例的映射。但是你想要一個從字符串到的映射。因此,你需要:

TDictionary<string, TComponentClass> 

其中

TComponentClass = class of TComponent 

注意,你不需要申報TComponentClass,因爲它是在Classes單位已聲明。

+1

謝謝,解決了一個問題:) – user2091150 2013-03-24 15:59:25