inherited nedir ? ne amaçla ve nasıl kullanılır ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
muratsert
Üye
Mesajlar: 8
Kayıt: 16 Tem 2005 10:33

inherited nedir ? ne amaçla ve nasıl kullanılır ?

Mesaj gönderen muratsert »

bu konuda yorum ve tecrübelerinizi bekliyorum
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 »

Mesne programlamanın temelinde hazırlanmış özelliklerin o sınıftan türeyen diğer sınıflara da geçmesi yatar. Böyle bir özelikte değişiklik yapılması gerekiyorsa ve daha önceki yazılan kodların da aynen çalışmazı şartsa o zaman önceki yazılanları çalıştırmak için bu kod kullanılır. Mesela bir bileşen yazalım ve bu bileşen bir liste tusun. Bu liste bileşenle beraber oluşturulmalı ve yok edilmeli olarak tasarladık. O zaman kodlar aşağıdaki gibi olmalı.

Kod: Tümünü seç

type
  TOrnek=class(TComponent)
  private
    Liste:TStringList;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;
.
.
.
.
constructor TOrnek.Create(AOwner:TComponent);override;
begin
  inherited;//<-TComponent sınıfının Create olayını çalıştırır
  //inherited Create(AOwner); -> da aynı işlevi yerine getirir
  Liste:=TStringList.Create;//<-ek olarak listemizi tutacak nesne oluşur
end;

destructor TOrnek.Destroy;
begin
  Liste.Free;//<-Oluşturduğumuz nesneyi yok ettik
  inherited;//<- TComponent sınıfının Destroy olayını çalıştırır
end;
Gibi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Bir A class'ın olsun ve bu class ta virtual olarak deklare edilmiş F fonksiyonun olsun.

Bu class tan türeyen B classı F'i override edip implement etsin. sonra C classı'da B'da türemiş bir class olsun ve F'i tekrar override edip implement etsin.

Kod: Tümünü seç


Type 

  A = class;
  Procedure F;Virtual;
  end;

  B = class(A)
  Procedure F;Override;
  end;

  C = class(B)
  Procedure F;Override;
  end;

implementation

Procedure C.F
begin
  inherited; --> Burda B.F çalışır.
end;

Procedure B.F
begin
  inherited; --> Burda A.F çalışır.
end;

Procedure A.F
begin

end; 
Açıklamalardanda anlayacağın gibi inherited, içine yazıldığı fonksiyonun, ata sınıfındaki implementasyonunu çağırır.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

@SabanAkman hocam aynı anda yazmışız, ben göndermeden önce senin cevabın yoktu, çift dikiş oldu :)

Delphi'de başka dillerde olmayan virtual constructer olanağı olduğu için ata sınıfların yaratılması için inheritedyazmak zorundayız. Onun için genellikle constructer larda denk geliyoruz buna ama tek işi bu değil tabiki.
Cevapla