protected hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
egedenizi
Üye
Mesajlar: 38
Kayıt: 25 May 2005 02:01

protected hakkında

Mesaj gönderen egedenizi »

merhabalar

vcl'de protected olarak hazirlanmis procedure ve fonksiyonları çağırabilir miyiz?Teşekkür ederim....
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

protected daha çok özellik tanımlama bölümüdür. Fonksiyon ve prosedürlerin yazımı burada olmaz. (virtual ve dynamic olanlar hariç). protected bölümde yazılan özellik, fonksiyon ve prosedürler çocuk sınıflarda açığa çıkartılabilir. Mesela TEdit nesnesinin kodlarına bakarsanız, TCustomEdit'ten türemiştir ve sadece TCustomEdit'te tanımlanmış protected özelliklerin published içinde tanımlanarak açığa çıkarılmış hali olduğunu göreceksiniz. virtual veya dynamic prosedür, fonksiyonlar da override ile yeniden yazılabilir durumdadırlar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Çağırabilirsiniz. Bu aslında hileli bir teknik ama işe yarar. Mesela:

Kod: Tümünü seç

TSomeClass = class
protected
  procedure BirMetod; virtual;
end;
gibi bir fonksiyondaki protected metoda erişmek için ya bu fonksiyondan türeyen bir bileşen yapacaksınız ya da kodlarınız bu sınıfın uniti ile aynı olacak. Ya da aşağıdaki tekniği kullanacaksınız:

Kod: Tümünü seç

TGosterenClass = class(TSomeClass)
public
  procedure BirMetod; override;
end;

Daha sonra kodlar içinde TSomeClass.BirMetod'a ulaşmak için:

var
  SomeClass: TSomeClass;
begin
  ....
  TGosterenClass(SomeClass).BirMethod;

Bileşen türetmeye benzese de yeni bir bileşen kaydettirmiyorsunuz. Böylece belkide bir çok bileşeni yeniden türetmekten kurtulmuş oluyorsunuz. Burada eğer prosedür sanal ya da dinamik ise override etmeyi unutmuyorsunuz, eğer değilse override kelimesini kaldırmalısınız.

vesselam
Cevapla