Bir sınıf tipi (T) ve bir arabirim türü (I) kabul eden ve nesneye (I) bir arabirim (I) döndüren bir işlev yazdım. İşte kod. hafıza sızıntıları ya da diğer istenmeyen beklendiği gibiArabirim nesnesini oluşturmak için Generic'leri kullanma
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;
fonksiyon çalışır.
Aynı sonuca ulaşmak için başka yollar var mı?
Ben bu emin değilim soru burada uygun. Belki de kod incelemesi daha iyi bir site olacaktır. Son sorunuz kesinlikle görüşe dayalı. İlk iki soru. 1. Evet, sorun değil. 2. Hayır, sorun yok. –
Son soruyu "aynı sonucu elde etmenin başka yolları var mı?" –
@LURD - – norgepaul