![]() |
AW: Generische Interface-GUIDs
Oh ja, ich habe das k vor dem einen überlesen. :pale: Wird Zeit den Kopf zu lüften... :-D
|
AW: Generische Interface-GUIDs
Delphi-Quellcode:
type
IGenItf<T> = geninterface // Keine GUID hier (oder doch, aber egal) function Foo: T; procedure Poo; end; type IIntItf = interface(IGenItf<Integer>) ['{123.......}'] end; IStrItf = interface(IGenItf<String>) ['{456.......}'] end; TImplObject = class(TInterfacedObject, IIntItf, IStrIntf) ... |
AW: Generische Interface-GUIDs
Wenn wir hier schon bei Wünsch dir was sind, dann wäre dies hier etwas weniger invasiv:
Delphi-Quellcode:
type
IGenItf<T> = interface ['<AutoGUID>'] function Foo: T; procedure Poo; end; |
AW: Generische Interface-GUIDs
Rein syntaktisch ist das doch eigentlich falsch. :stupid:
Attribute stehen doch vor dem, was sie beschreiben und (leider) nicht dahinter.
Delphi-Quellcode:
type
[AutoGUID] IGenItf<T> = interface function Foo: T; procedure Poo; end; [GUID('{00000000-0000-0000-0000-000000000000}')] IGenItf<T> = interface function Foo: T; procedure Poo; end; |
AW: Generische Interface-GUIDs
Zitat:
Oder gibt es Fälle wo man wirklich keine haben will? |
AW: Generische Interface-GUIDs
Na viel Spaß sobald der Erste versucht sich das über Modulgrenzen (EXE, DLL) hinweg in andere Sprachen/Framework zu übergeben und die Gegenseite eher nicht so glücklich mit dynamischen GUIDs ist.
|
AW: Generische Interface-GUIDs
Zitat:
|
AW: Generische Interface-GUIDs
Zitat:
Solange nicht klar definiert ist, welche GUID zu welchem konkreten Typ dynamisch zugeordnet wird, klappt das ganze nicht. Deshalb könnte ich mir nur eine im Projekt gepflegte Tabelle oder etwas ähnliches vorstellen, ähnlich dem TLB-Editor, mit speziellen Textdateien, die die Zuordnungen anhand des voll qualifizierten Typnamens, sprich inkl. Unitname, enthalten. Ich kann mir aber ehrlich gesagt nicht so recht vorstellen, dass Embarcadero ein solches Feature implementiert, wenn es nicht wirklich viele, ganz viele, Votes für einen entsprechenden Featurerequest gibt. |
AW: Generische Interface-GUIDs
Delphi-Quellcode:
const
// Die Konstante kann auch aus einer gemeinsamen UNIT oder .INC kommen. // resourcestring anstatt const geht aber nicht, weil Konstante eine GUID und kein String sein muß. MyGUID: TGUID = '{BE3C619C-001C-490E-A377-C08D51E18C0C}'; type IGenItf<T> = interface [MyGUID] function Foo: T; procedure Poo; end;
Delphi-Quellcode:
type
IGenItf<T> = interface [{$INCLUDE 'MyGUID.inc'}] // '{BE3C619C-001C-490E-A377-C08D51E18C0C}' function Foo: T; procedure Poo; end;
Delphi-Quellcode:
nur Nachfolgendes geht natürlich nicht
type
IGenItf<T> = interface {$INCLUDE 'MyGUID.inc'} // ['{BE3C619C-001C-490E-A377-C08D51E18C0C}'] function Foo: T; procedure Poo; end;
Delphi-Quellcode:
type
IGenItf<T> = interface ['{$INCLUDE MyGUID.inc}'] // {BE3C619C-001C-490E-A377-C08D51E18C0C} function Foo: T; procedure Poo; end;
Delphi-Quellcode:
type
IGenItf<T> = interface ['{{$INCLUDE MyGUID.inc}}'] // BE3C619C-001C-490E-A377-C08D51E18C0C function Foo: T; procedure Poo; end; |
AW: Generische Interface-GUIDs
Zitat:
Bei generische interfaces über Modulgrenzen hinweg - selber Schuld wer sowas dort verwenden will. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz