Merhaba değerli üyeler ;
Aşağı da ki örnek kod bloğunda Temel sınıftan (TBase) türetilmiş diğer sınıfların Sınıf isimlerini parametre geçtiğim bir fonksiyon içinden uygun sınıfla oluşturarak geri döndürmek istiyorum. ancak tip uyumsuzluğu hatası alıyorum, genel kurgu daki sorunu bulmamda yardımcı olursanız memnun olurum.
Aşağı da ki örnek kod bloğunda Temel sınıftan (TBase) türetilmiş diğer sınıfların Sınıf isimlerini parametre geçtiğim bir fonksiyon içinden uygun sınıfla oluşturarak geri döndürmek istiyorum. ancak tip uyumsuzluğu hatası alıyorum, genel kurgu daki sorunu bulmamda yardımcı olursanız memnun olurum.
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type TBase = class
private
FHataKodu : Integer ;
FHataMesaji : String ;
published
property HataKodu : Integer read FHataKodu write FHataKodu;
property HataMesaji : String read FHataMesaji write FHataMesaji;
end;
TBaseClass = class of TBase ;
type TKayitSonuc = class( TBase )
private
FYeniID : Integer ;
published
property YeniID : Integer read FYeniID write FYeniID;
end;
type TSilSonuc = class( TBase )
private
FSilinenAdet : Integer ;
published
property SilinenAdet : Integer read FSilinenAdet write FSilinenAdet;
end;
function GetSonuc( pSonucTipi : TBaseClass ) : TBase ;
begin
Result := pSonucTipi.Create;
Result.HataKodu := 0 ;
Result.HataMesaji := '';
end;
var
aKayitSonuc : TKayitSonuc;
aSilSonuc : TSilSonuc;
begin
try
aKayitSonuc := GetSonuc( TKayitSonuc );
//derleme anında E2010 Incompatible types : TKayitSonuc and TBase hatası alıyorum.
// Çözüldü , aşağıda ki gibi hedef sınıfa CAST işlemi uygulamayı atlamamak gerekiyor tabi.
aKayitSonuc := GetSonuc( TKayitSonuc ) as TKayitSonuc;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

