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.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
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
  Üretim planlama hakkında boreas 2 234 19-06-2020, Saat: 11:25
Son Yorum: uparlayan
  Component Oluşturup silmede ram kullanımı tabikisura10 14 847 07-06-2020, Saat: 20:33
Son Yorum: SimaWB
  touchkeyboard kullanımı erdogan 14 1.488 04-06-2020, Saat: 10:35
Son Yorum: bydelphi
  EHLIP Memtable Kullanımı ErcanT 2 421 28-04-2020, Saat: 09:49
Son Yorum: ErcanT
  Memo bileşeni Duplicate veya Put hakkında yardım kofmaster 6 756 11-04-2020, Saat: 22:39
Son Yorum: kofmaster



Konuyu Okuyanlar: 1 Ziyaretçi