Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
read ve write kullanımı hakkında
#1
arkadaşlar  merhaba ben delphi programlama konusunda yeniyim.Bu yüzden temel konularda bazı eksiklerim var.Aşagıdaki kodda "read"  ve "write"   yapıları kullanılmış bunlar tam olarak neyi ifade ediyor.İnternette aradım ama pek uygun sonuca ulaşamadım.Bu konuda örnek verebilecek arkadaşlar olursa çok sevinirim.Teşekkürler,Saygılar...

TUser=class(Tremotable) //1
  private
  FLastname:AnsiString;
  FFirstName:AnsiString;
  FID:Int32;
public
  constructor create (id : integer ;firstname:string;lastname:string );
published
  property id:int32 read fid write fid;
  property Lastname:AnsiString read FLastname write FLastname;
  property FirstName:AnsiString read FFirstName write FFirstName;
end;

TListUser=array of TUser; //2
Cevapla
#2
Merhaba,
Read ve write ifadeleri bir sınıfın property'sine (özelliğine / üyesine) bir değer atanması veya bir değer okunması (istenmesi) anında çalışan tetikleyicileridir. 
Örneğin;
TOgrenci sınıfımız olsun. 
type
 TOgrenci = class
 private
   FFinalNotu: Single;
   FVize1, FVize2: Single;
   FOrtalama: Single;
   procedure SetFinalNotu(val: Single);
   function GetOrtalama(): Single;
 public
   property FinalNotu: Single read FFinalNotu write SetFinalNotu;
   property Ortalama: Single read GetOrtalama write FOrtalama;
 end;

implemantation kısmı da aşağıdaki gibi olsun
implementation

{$R *.dfm}

function TOgrenci.GetOrtalama: Single;
begin
 Result := FOrtalama;
end;

procedure TOgrenci.SetFinalNotu(val: Single);
begin
 FFinalNotu := val;
 FOrtalama := ((FVize1 + FVize2) / 2) * 0.30 + (FFinalNotu + 0.70);
end;

Uygulamada aşağıdaki gibi bir atama yaptığınızda;
var
 Ogrenci: TOgrenci;
begin
 Ogrenci := TOgrenci.Create;
 Ogrenci.FinalNotu := 95;
end;
arka planda SetFinalNotu procedure'ü çalışacak ve  FFinalNotu sınıf üyesini güncelleyecektir. Daha sonra FFinalNotu üyesi hangi üye ve metodları etkiliyorsa onlar üzerinde işlem ve atamalar yapılacaktır.
Örneğimizde, Final notunun belli olması genel ortalamayı etkileyeceği için FOrtalama üyesinin değeri yeniden hesaplanmıştır.
Yani siz final notunu güncellediğinizde, öğrencinin ortalaması da otomatik güncellenecektir.
Bu işlem Object Pascal yazılım dilinde Set metodu (Setter) olarak niteldirilmektedir.
Setter'lar write ifadesinden sonra yazılırlar. Kendisinden sonra bir metod veya aynı veri tipli lokal bir değişken gelir.
Örneğimizdeki Setter metodunun yerine lokal bir değişken kullanılsaydı. Arka planda yalnızca bu değişken değeri güncellenecek ve farklı bir atama yapılmayacaktı.
Bu da şunu gösteriyor ki setter'larda metod yalnızca diğer üyelerin etkilenmesi durumunda kullanılmalıdır. Diğer durumlarda bir değişken yeterli olacaktır.

Final notu atamasını yaptıktan sonra öğrencinin not ortalamasını öğrenmek istediğimizde (bir bileşen üzerinde veya mesajla göstermek gibi), yani aşağıdaki gibi bir atama yaptığımızda,
Caption:= Ogrenci.Ortalama.ToString;
Ortalam property'sinde tanımlı GetOrtalama metodu (function'u) çalışacak ve daha önce SetFinalNotu ile atanan FOrtalama değeri, sınıfın Ortalama özelliğine atanmış olacaktır.
Bu işlem Object Pascal yazılım dilinde Get metodu (Getter) olarak niteldirilmektedir.
Getter'larda da Setter'larda olduğu gibi read ifadesinden sonra yazılırlar. Kendisinden sonra bir metod veya aynı veri tipli lokal bir değişken tanımlanır.
Property tanımında getter ve setter tanımlama zorunluluğu yalnızca ata sınıfta geçerlidir. Ata sınıftan devralınan bir property için yeniden getter ve setter tanım ihtiyacı olmaz.
Bir property ihtiyaç doğrultusunda yalnızca setter veya yalnızca getter'a da sahip olabilir.
Yani her iki ifadenin mutlak kullanılması gerekmez.
Cevapla
#3
(21-05-2019, Saat: 10:51)alisahin Adlı Kullanıcıdan Alıntı: arkadaşlar  merhaba ben delphi programlama konusunda yeniyim.Bu yüzden temel konularda bazı eksiklerim var.Aşagıdaki kodda "read"  ve "write"   yapıları kullanılmış bunlar tam olarak neyi ifade ediyor.İnternette aradım ama
pek uygun sonuca ulaşamadım.Bu konuda örnek verebilecek arkadaşlar olursa çok sevinirim.Teşekkürler,Saygılar...


  1. TUser=class(Tremotable) //1
    
  2.     private
  3.     FLastname:AnsiString;
  4.     FFirstName:AnsiString;
  5.     FID:Int32;
  6.     public
  7.     constructor create (id : integer ;firstname:string;lastname:string );
  8.     published
  9.         property id:int32 read fid write fid;
  10.          property Lastname:AnsiString read FLastname write FLastname;
  11.            property FirstName:AnsiString read FFirstName write FFirstName;
  12.     end;
  13.      TListUser=array of TUser; //2

c# ve java daki Get Set ile aynı işlevde.
WWW
Cevapla
#4
Çok teşekkür ederim.Konuyu anladım.Elinize sağlık
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  AES Şifreleme Hakkında tmrksmt 18 1.276 14-02-2024, Saat: 10:42
Son Yorum: tmrksmt
  TDictionary kullanımım hakkında yhackup 3 399 09-02-2024, Saat: 15:58
Son Yorum: SimaWB
  TfrxReport Rapor dizaynı hakkında yhackup 2 227 24-01-2024, Saat: 11:35
Son Yorum: yhackup
  Unigui iframe kullanımı delphiX14 4 1.526 21-12-2023, Saat: 12:14
Son Yorum: delphiX14
  EdgeBrowser Hakkında bydelphi 2 509 19-11-2023, Saat: 10:21
Son Yorum: bydelphi



Konuyu Okuyanlar: 1 Ziyaretçi