Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: "Class Of..." für Interfaces

  Alt 11. Jan 2008, 09:12
Zitat von Dax:
Ja, die Lösung ist: geht nicht. Interfaces sind an Instanzen gebunden, Metaklassen hast du nur für TObject und Nachfahren davon.
*Hust*
Klar geht das.
Man braucht eigentlich kein Äquivalent zu Metaklassen bei Iterfaces, da diese keine Instanzmethoden und Konstruktoren haben. Nur für den Namen wäre das ganz nett.
Da sie aber sowieso nur über die GUID identifiziert werden, kann einfach die hernehmen:
Delphi-Quellcode:
type
  ISample = interface
  ['{451B5891-0E6C-4A76-A667-A8D7499391E7}']
  end;

  TSample1 = class
  end;

  TSample2 = class(TInterfacedObject, ISample)
  end;

var
  guid : TGUID;
  classRef : TClass;
  classSupportsInterface : Boolean;
begin
  guid := ISample;
  classRef := TSample1;

  classSupportsInterface := Supports(classRef, guid);

  Writeln(classRef.ClassName, ' supports ', GUIDToString(guid), ': ', classSupportsInterface);

  classRef := TSample2;

  classSupportsInterface := Supports(classRef, guid);

  Writeln(classRef.ClassName, ' supports ', GUIDToString(guid), ': ', classSupportsInterface);
end.
Output
TSample1 supports {451B5891-0E6C-4A76-A667-A8D7499391E7}: FALSE
TSample2 supports {451B5891-0E6C-4A76-A667-A8D7499391E7}: TRUE
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat