Foreward Class Declaration

Bazen yazdığımız sınıflarda henüz tanımlanmamış ama kod içinde ilerleyen kısımlarda tanımlanacak olan bir sınıfı kullanmamız gerekir. Örnek kod ile anlatmak gerekirse:

 
type
  TMyItem = Class(TCollectionItem)
  private
    ParentObect:TMyCollection;
  public
End; 
 
  TMyCollection = Class(TCollection)
private
    function GetItems(Index: integer): TMyItem;
    procedure SetItems(Index: integer; const Value: TMyItem);
  public
    property Items[Index: integer]: TMyItem read GetItems write SetItems; default;
End;
 

Yukardaki kod içinde hem item hemde collection bir birlerine referans göstermektedir. Bu hali ile delphide bu kodu derlemek mümkün değildir. Çünkü henüz tanımlanmamış olan TMyCollection TMyItem sınıfında kullanılmaktadır. Bu duruma çözüm foreward tanımlamadır. Tek yapılması gereken önceden tanımlanacak olan sınıfın adını TMyClass=class ; şeklinde tanımlamaktır.
işte örnek kodun son hali

 
type
 TMyCollection=class;//ön tanımlama foreward classs declaration burda yapılıyor.
  TMyItem = Class(TCollectionItem)
  private
    ParentObect:MyCollection;
  public
End; 
 
type
  MyCollection = Class(TCollection)
private
    function GetItems(Index: integer): TMyItem;
    procedure SetItems(Index: integer; const Value: TMyItem);
  public
    property Items[Index: integer]: TMyItem read GetItems write SetItems; default;
End;
 

Yanlız bu şekilde foreward tanımlama yapabilmek için sınıfların aynı unitte ve aynı Type bildirimin altında yazılması gerekiyor.

    • No Related Post
bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark
tabs-top

2 Comments »

  1. Nerde kullanırız ne zaman gerek olur bir örnek yordam anlatırmısın

    comment-bottom
  2. Berkant Says:

    Bu durum delphi ye özel biraz. Tip tanımlamalarını sıra ile yapmak zorundayız ama bazen tipleri iç içe kullanmam gerekebilir.
    Yukardaki örnekte Item nesnesi bir listenin üyesi ve kendisinin ebeveynini tutacak olan ParentObject özelliğini tanımlıyor.
    MyCollection ise MyItem tipinden nesneleri içeren bir liste yapısı tanımlıyor. Yani her ikisede bir birine referans tanımlamalar yapıyor.
    Böyle bir problemi çözmek için foreward tanımlama kullanıyoruz.

    comment-bottom

RSS feed for comments on this post. TrackBack URL

Leave a comment