5 Stimmen

Die .NET 'Typ' Klassenalternative in Delphi

Ich möchte in Delphi (2009 - also habe ich eine generische Dictionary-Klasse) etwas Ähnliches wie diesen C#-Code schreiben:

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

Irgendwelche Ideen?

Vielen Dank im Voraus,

Hristo

9voto

Mason Wheeler Punkte 79858

Für Schnittstellen möchten Sie einen PTypeInfo-Zeiger verwenden, der von der Compiler-Magiefunktion TypeInfo zurückgegeben wird. PTypeInfo wird in der TypInfo-Einheit deklariert.

type
  TInterfaceDictionary = TObjectDictionary;
var
  d: TInterfaceDictionary;
  myObject: TSomeImplementation;
begin
  d := TInterfaceDictionary.Create([doOwnsValues]);
  d.Add(TypeInfo(ISomeInterface), TSomeImplementation.Create());
  myObject = d[TypeInfo(ISomeInterface)];
end;

Natürlich könnten Sie, wenn es sich um Klassen anstelle von Schnittstellen handeln würde, einfach einen TClass-Verweis verwenden.

6voto

Uwe Raabe Punkte 41879

Wenn es sich tatsächlich um ein TInterfaceDictionary handelt, können Sie es so schreiben:

type
  TInterfaceDictionary = TObjectDictionary;

Offensichtlich erfordert dies eine GUID für jedes zu verwendende Interface.

Dank einiger Compiler-Tricks können Sie es recht einfach verwenden:

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

(Mason: Entschuldigung für die Übernahme des Beispielcodes)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X