Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Çok biçimlilik hakkında (Çözüldü)
#1
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.


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.
Cevapla
#2
(09-02-2021, Saat: 15:10)vkamadan Adlı Kullanıcıdan Alıntı: 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.


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.

 except
   on E: Exception do
     Writeln(E.ClassName, ': ', E.Message);
 end;
end.
aKayitSonuc := GetSonuc( TKayitSonuc );
burada sınıf değil referans nesne göndermek gerek
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#3
(09-02-2021, Saat: 15:42)narkotik Adlı Kullanıcıdan Alıntı:
(09-02-2021, Saat: 15:10)vkamadan Adlı Kullanıcıdan Alıntı: 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.


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.

 except
   on E: Exception do
     Writeln(E.ClassName, ': ', E.Message);
 end;
end.
aKayitSonuc := GetSonuc( TKayitSonuc );
burada sınıf değil referans nesne göndermek gerek

Merhaba , 
basit bir hata yapıyormuşum  , sonuçta dönen tip TBase  tipinde,  onu TKayitSonuc a CAST etmem gerekiyor, 

aKayitSonuc := GetSonuc( TKayitSonuc ) as TKayitSonuc;

aSilSonuc := GetSonuc( TSilSonuc ) as TSilSonuc;

Şeklinde kullanım doğru olan, 
ilginize teşekkürler.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQL Table Type parametre gecisi hakkında (Çözüldü) adelphiforumz 1 151 09-04-2026, Saat: 15:53
Son Yorum: adelphiforumz
  Video Oynatma Hakkında adelphiforumz 7 844 17-12-2025, Saat: 07:36
Son Yorum: mrmarman
  nduWlanAPI Kullanımı hakkında nurah 3 806 09-09-2025, Saat: 09:33
Son Yorum: RAD Coder
  AES Şifreleme Hakkında tmrksmt 25 5.850 06-09-2025, Saat: 22:12
Son Yorum: delphi.developer
  SuperObject dosyaları hakkında adelphiforumz 2 622 18-06-2025, Saat: 11:02
Son Yorum: engerex



Konuyu Okuyanlar: 1 Ziyaretçi