2009-06-23 13 views
5

ich in Delphi schreiben will (2009 - so generic Wörterbuch Klasse I haben) etwas ähnlich dem Code C#:.NET 'Typ' Klasse Alternative in Delphi

Dictionary<Type, Object> d = new Dictionary<Type, Object>(); 
d.Add(typeof(ISomeInterface), new SomeImplementation()); 
object myObject = d[typeof(ISomeInterface)]; 

Irgendwelche Ideen?

Vielen Dank im Voraus,

Hristo

Antwort

9

Für Schnittstellen, sollten Sie einen PTypeInfo Zeiger verwenden, die durch den Compiler magische Funktion Typeinfo zurückgegeben wird. PTypeInfo wird in der TypInfo-Einheit deklariert.

Natürlich, wenn dies Klassen statt Schnittstellen wären, könnten Sie einfach eine TClass-Referenz verwenden.

+0

Danke, Mason

Aufgrund einiger Compiler Magie können Sie es ganz einfach nutzen. Das ist die Lösung, nach der ich gesucht habe. Jetzt werde ich eine einfache Implementierung des Registrierungsentwurfs erstellen und ich möchte, dass mein Code etwa so aussieht: Registry.RegisterComponent (TSomeImplementation.Create); // oder vielleicht sogar: RegisterComponent (TSomeImplementation); . . . ISomeInterface i: = Registry.GetComponent ; @ Uwe Raabe: Es ist interessant zu wissen, dass dies möglich ist, aber in meinem Fall haben Schnittstellen keine GUID. –

+0

Als Nebenbemerkung, ich war letzten Monat bei der Delphi Live Konferenz und Barry Kelly hat eine Präsentation über ein neues erweitertes RTTI Modell gehalten, das in Delphi 2010 sein soll. Es ist viel vollständiger als das existierende Funktionssatz und viel einfacher zu arbeiten. –

6

Wenn es tatsächlich ein TInterfaceDictionary ist, können Sie es wie folgt schreiben:

type 
    TInterfaceDictionary = TObjectDictionary<TGUID, TObject>; 

Offensichtlich erfordert dies eine GUID für jede Schnittstelle zu verwenden.

d.Add(ISomeInterface, TSomeImplementation.Create()); 

(Mason:: sorry den Beispielcode für Hijacking)

+0

Huh. Daran hatte ich nicht gedacht. Ja, das wird speziell für Schnittstellen mit GUIDs funktionieren. –