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