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.
RSS feed for comments on this post. TrackBack URL
Nerde kullanırız ne zaman gerek olur bir örnek yordam anlatırmısın
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.