我想用Delphi编写(2009 - 所以我有通用字典类)类似于C#代码:
Dictionary<Type, Object> d = new Dictionary<Type, Object>();
d.Add(typeof(ISomeInterface), new SomeImplementation());
object myObject = d[typeof(ISomeInterface)];
有什么想法吗?
提前致谢,
赫里斯托斯
答案 0 :(得分:9)
对于接口,您需要使用PTypeInfo指针,该指针由编译器魔术函数TypeInfo返回。 PTypeInfo在TypInfo单元中声明。
type
TInterfaceDictionary = TObjectDictionary<PTypeInfo, TObject>;
var
d: TInterfaceDictionary;
myObject: TSomeImplementation;
begin
d := TInterfaceDictionary.Create([doOwnsValues]);
d.Add(TypeInfo(ISomeInterface), TSomeImplementation.Create());
myObject = d[TypeInfo(ISomeInterface)];
end;
当然,如果这是类而不是接口,你可以使用TClass引用。
答案 1 :(得分:6)
如果它实际上是一个TInterfaceDictionary,你可以这样写:
type
TInterfaceDictionary = TObjectDictionary<TGUID, TObject>;
显然,这需要每个接口使用GUID。
由于一些编译器魔法,你可以非常简单地使用它:
d.Add(ISomeInterface, TSomeImplementation.Create());
(梅森:对于劫持示例代码感到抱歉)