17-03-2022, Saat: 11:17
(16-03-2022, Saat: 00:08)ismailkocacan Adlı Kullanıcıdan Alıntı: Generics'lerin sağladığı faydalar arasında; Type casting'i azaltarak olası casting hataları önlemek, algoritmayı türden bağımsız yazarak, kod tekrarını önlemek gibi faydaları var.
- Sorunuzu başlığında "Generic tipi Arraya Cast etme" yazıyor. Bir array tanımı, yapısı göremedim.
- AValue parametresine neden ihtiyaç var ?
- DeserializeValueTo fonksiyonun T type parametresine, neden dönüştürmek istediğimiz yapıyı (TMyRecord) geçmiyoruz. ? DeserializeValueTo<TMyRecord>....
- DeserializeSimple nerde ve hangi parametre değeri geçilerek çağırılıyor.
procedure TfrmSerializationBase.DeserializeSimple<T>(AValue: T); var LVal: T; KayitTipi:TMyRecord; begin LVal := DeserializeValueTo<T>(AValue, memoSerialize.Lines, frmConfiguration.BuildSerializerConfig); // AValue parametresine neden ihtiyaç var ? KayitTipi:= TMyRecord(LVal); // Neden burada cast ediyoruz. ?? SerializeValueFrom<T>( TValue.From<T>(LVal), memoDeserialize.Lines, frmConfiguration.BuildSerializerConfig); end;
Merhabalar öncelikle haklısınız kodlarda Array yok. Ama benim anlattığım mantıkta Recordlerden oluşan bir Array yapım var. AValue değeri zaten yukarıda belirtiğiniz TfrmSerializationBase.DeserializeSimple<TMyRecord>(AValue: T); gibi fonksiyona Deserialize edilecek olan değerleri taşıyor.
KayitTipi:= TMyRecord(LVal); Bunu aslında Deserialize den sonra Cast etmeden almam gerekiyor çünkü zaten Record tipini verdim. Ama malesef Delphi hata veriyor o yüzden göstermek için fonksiyon içine yazdım. Aslında burda olmayacak o kod.

