Ho scritto una funzione che accetta un tipo di classe (T) e un tipo di interfaccia (I) e restituisce un'interfaccia (I) all'oggetto (T). Ecco il codice.Uso di Generics per creare un oggetto interfacciato
interface
function CreateObjectInterface<T: Class, constructor; I: IInterface>(
out AObject: TObject): I;
...
implementation
function TORM.CreateObjectInterface<T, I>(out AObject: TObject): I;
begin
AObject := T.Create;
if not Supports(AObject, GetTypeData(TypeInfo(I))^.Guid, Result) then
begin
AObject.Free;
AObject := nil;
raise EORMUnsupportedInterface.CreateFmt(
'Object class "%s" does not support interface "%s"',
[AObject.ClassName, GUIDToString(GetTypeData(TypeInfo(I))^.GUID)]
);
end;
end;
La funzione funziona come previsto, senza perdite di memoria o altri indesiderabili.
Ci sono altri modi per ottenere lo stesso risultato?
non sono sicuro che questo la domanda è appropriata qui. Forse la revisione del codice sarebbe un sito migliore. La tua domanda finale è certamente basata sull'opinione pubblica. Prime due domande. 1. Sì, questo è OK. 2. No, nessun problema. –
Riformula l'ultima domanda in "ci sono altri modi per ottenere lo stesso risultato?" –
@LURD - Ho riformulato la domanda – norgepaul