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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
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
  Moduler Programlama Hakkinda TheEAK 4 105 1 saat önce
Son Yorum: TheEAK
  Fdmemtable kullanimi arsl01 8 459 11-09-2019, Saat: 01:32
Son Yorum: Aktolgali
  Thread içerisinde sleep kullanımı berk06 1 172 26-08-2019, Saat: 11:36
Son Yorum: Tuğrul HELVACI
  TNotification Kullanımı hk yhackup 4 241 07-08-2019, Saat: 18:51
Son Yorum: Bay_Y
  SQL Kullanımı OZCANK 15 788 26-07-2019, Saat: 18:27
Son Yorum: adelphiforumz



Konuyu Okuyanlar: 1 Ziyaretçi