Dato il seguente frammento di codice:TCustomAttribute - "espressione costante previsto" errore di compilazione
type
MyIntf = interface
['{C6184693-663E-419F-B2DA-4DA1A0E33417}']
procedure Foo;
end;
InvisiblePropInterfaces = class(TCustomAttribute)
private
FGUIDS: array of TGUID;
public
constructor Create(const GUIDS: array of TGUID);
end;
[InvisiblePropInterfaces([MyIntf])] // <-- Constant expression expected error
TMyClass = class(TInterfacedObject, MyIntf)
procedure Foo;
end;
Perché il compilatore che questo non è un'espressione costante? Ma dato che utilizzo InvisiblePropInterfaces come questo, il compilatore è semplicemente felice?
...
var
I: InvisiblePropInterfaces;
begin
I:= InvisiblePropInterfaces.Create([MyIntf]);
...
sembra che io non abbia fortuna con il mio primo vero uso di attributi. Bene, allora devo cambiare il mio design e semplicemente decorare le mie classi con un'altra interfaccia, qualcosa del tipo: IInvisiblePropInterfaces = funzione dell'interfaccia GetGuids: array di TGuid – iamjoosy