Napisałem funkcję, która akceptuje typ klasy (T) i typ interfejsu (I) i zwraca interfejs (I) do obiektu (T). Oto kod.Używanie Generics do tworzenia obiektu z interfejsem
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;
Funkcja działa zgodnie z oczekiwaniami bez wycieków pamięci lub innych niepożądanych.
Czy istnieją inne sposoby osiągnięcia tego samego rezultatu?
nie jestem pewien, że ten pytanie jest tutaj odpowiednie. Być może recenzja kodu byłaby lepszą stroną. Twoje ostateczne pytanie jest z pewnością oparte na opiniach. Pierwsze dwa pytania. 1. Tak, to jest OK. 2. Nie, żadnych problemów. –
Przeformułuj ostatnie pytanie do "Czy istnieją inne sposoby osiągnięcia tego samego wyniku?" –
@LURD - Przeformułowałem pytanie – norgepaul