Class clone lama yönetminiz var mı?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ercan_elo_bil
Üye
Mesajlar: 26
Kayıt: 11 Tem 2014 11:13

Class clone lama yönetminiz var mı?

Mesaj gönderen ercan_elo_bil »

MErhaba,

Class clone lama yönetminiz var mı? ben json string e a cevirip sonra tekrar class ceviyorum yada TJSONMarshal yöntemi.
bunun dışında sizin kullandığınız var mı?

Kod: Tümünü seç

var
Test1,cloneTest: Tclass;

Test1: =Tclass.create;
Test1.ad:='deneme';

//1 yöntem
cloneTest:= TJson.JsonToObject<Tclass>(TJson.ObjectToJsonString(Test1));
debug(cloneTest.ad); //deneme;

//2 yöntem
cloneTest:= TCloneType.Clone<Tclass>(Test1);
debug(cloneTest.ad); //deneme;


class function TCloneType.Clone<T>(inObject: T): T;// 

var
  MarshalObj: TJSONMarshal;
  UnMarshalObj: TJSONUnMarshal;
  JSONValue: TJSONValue;
begin
  Result := nil;
  try
    MarshalObj := TJSONMarshal.Create;
    UnMarshalObj := TJSONUnMarshal.Create;
    try
      JSONValue := MarshalObj.Marshal(inObject as T);
      try
        if Assigned(JSONValue) then
          Result := T(UnMarshalObj.Unmarshal(JSONValue));
      finally
        FreeAndNil(JSONValue);
      end;
    finally
      FreeAndNil(MarshalObj);
      FreeAndNil(UnMarshalObj);
    end;
  Except
  end;
end;

En son ercan_elo_bil tarafından 18 Mar 2021 04:55 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Garbage Collector, Delphi çöp üretmez çöpü bulup temizlemeye asla gerek yoktur... :D
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Class clone lama yönetminiz var mı?

Mesaj gönderen freeman35 »

Mesajda code tag ını kullanırsan yazın daha anlaşılır olur.
Neye? Neden? ihtiyacın var yazarsan daha farklı yöntemler çıkabilir. Senin yazdın mesajdan yazdıklarına teyid etmemizi istiyorsun gibi bir şey anladım.
Assign komutunu inceleyebilirsin.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ercan_elo_bil
Üye
Mesajlar: 26
Kayıt: 11 Tem 2014 11:13

Re: Class clone lama yönetminiz var mı?

Mesaj gönderen ercan_elo_bil »

Teyit değil, benim kodlarda clone lama ihtiyacın oluyor ama bu iki yöntem clone lamada zayıf ve yavaş. başka ne yöntemle clonelanabilir diye düşünüyorum.

clone özelliğini multithread çalıştığım uygulamalarda kullanıyorum her bir thread in icinde kendi memorysinden oluşturulan class kullanılması gerekiyor birbirinden bağımsız, ortak noktada oluşturduğum class ı clone lamak zorundayım.
Garbage Collector, Delphi çöp üretmez çöpü bulup temizlemeye asla gerek yoktur... :D
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Class clone lama yönetminiz var mı?

Mesaj gönderen freeman35 »

Tenkit değil, ısrarla illa benim istediğim clone u nasıl yaparım diyorsun ama ne class ın nede başka bir bilgi var. sırdır eyvAllah ama bizde ne yazdığını bilemeyiz değil mi?
gene bir tahminde bulunayım. class konusunda ve pointer lar hakkında araştırma yap. thread olması class yapısını değiştirmez, yani thread siz yapsanda çalışacak olan thread lede çalışır.
her bir thread in icinde kendi memorysinden oluşturulan class kullanılması gerekiyor birbirinden bağımsız,
"thread" bu da zaten bir class tır. class ların memory kullanma şekilleri bellidir. OOP tekniğinin temeli ve oluşturulma sebebi budur. memory yi optimize kullanmak. class ı record gibi düşün. her new dediğinde, toplam size ı kadar yer gider, ta ki free leyene kadar. class ta ise sadece ilk create edildiğinde hepsi memory ye alınır, sonrası ise private public kısımlarına göre yönlendirilir. detaya girmeden anlatıyorum. private alan mealindende anlaşılacağı üzere her create dekendine ait ve tekrar oluşturulur, ve dışarıdan erişilemez, public ise tersidir, dışarıdan erişilir. o yüzden property sistem vardır. dışarıdan değişkene okuma ve yazma yapılabilinir. ama değer, class ın o pointer ı na bağlıdır.

Kod: Tümünü seç

type
TlazimOlanClass = class(flanca)
....
private
 FADegisken: Boolean;
 FBDegiskeb:TDateTime
....
public
 property ADegisken boolean read FADegisken write FADegisken;
//-------------
type
Senin_thread= class(xxxxxx)
private
 lazimOlanClass: TlazimOlanClass; 
....
.....
Senin_thread.olustur;
lazimOlanClass:= TlazimOlanClass;
 lazimOlanClass.Adegisken:= True;
Diğer taraftan da mesele sadece değişken(lerin) transferi ise ben "record" kullanırdım.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
3ddark
Üye
Mesajlar: 89
Kayıt: 14 Eyl 2010 10:55
Konum: İstanbul

Re: Class clone lama yönetminiz var mı?

Mesaj gönderen 3ddark »

https://delphihaven.wordpress.com/2011/ ... sing-rtti/
Bu linki inceleyin. Aradığınız işlem bu olabilir.
PostgreSQL - Delphi - Linux :!:
Cevapla