![]() |
Auf Feld der übergeordneten Klasse zugreifen
Hallo zusammen,
ich habe (mal wieder) eine Grundsatzfrage, (der Post wird also wieder etwas länger)
Delphi-Quellcode:
Die Klasse TChapter hat nun eine Methode namens OpenChapter, die dieses Chapter (das als PDF File existiert) mit dem zugehörigen Programm (per Shell-Execute o.Ä.) öffnen soll
type TBookShelf = class(TObject)
private FSavePath : string; FBooks : TObjectList; public end; type TBook = class(TObject) private FBookTitle : string; FChapters : TObjectList; end; type TChapter = class(TObject) private FChapterTitle : string; public procedure OpenChapter; end; Nun das eigentliche Problem: Wie bekomme ich in TChapter den gesamten Dateinamen heraus, der sich folgendermaßen zusammensetzt: "TBookShelf".FSavePath\"TBook".FBookTitle\"TChapte r".FChapterTitle.pdf Die einzige Möglichkeit, die ich kenne, wie es zu machen geht, wäre, dass ich über die Konstruktoren den Instanzen von TBook & TChapter eine Referenz auf deren "Parent" mitgebe:
Delphi-Quellcode:
Somit also am Beispiel von TChapter (TBook analog: FBookShelf : TBookShelf)
constructor TBook.Create(bks : TBookShelf)
constructor TChaoter.Create(bk : TBook) [...] in TBookShelf: FBooks.Add(TBook.Create(self)); [...] in TBook: FChapters.Add(TChapter.Create(self));
Delphi-Quellcode:
Ich habe dabei das Gefühl, den OOP Ansatz nicht wirklich umzusetzen / verstanden zu haben, wenn ich jedem Element eine Referenz auf seinen "Parent" mitgebe.
type TChapter = class(TObject)
private FChapterTitle : string; FBook : TBook; public constructor Create(bk : TBook); procedure OpenChapter; end; constructor TChapter.Create(bk : TBook); begin inherited Create; FBook := bk; end; procedure TChapter.OpenChapter; var completePath : string; begin completePath := bk.FBookShelf.SavePath + bk.BookTitle + FChapterTitle; end; Um diesen langen und zugegebenermaßen verwirrenden Post zusammenzufassen: Gibt es eine andere Möglichkeit, in TChapter auf Felder aus TBook und TBookShelf zuzugreifen, als jedem Element eine Referenz auf seinen "Parent" zu geben p.s. mir ist so, als ob ich diese Frage schon mal gestellt hätte, aber ich habe bei einer Suche nichts gefunden. Falls dem tatsächlich so ist, tut's mit leid. |
Re: Auf Feld der übergeordneten Klasse zugreifen
Über den Owner. Du hast ja beim Erzeugen das TBookShelf bzw. das -Objekt als diesen übergeben. Also:
Delphi-Quellcode:
completePath := bk.((Owner as TBook) as TBookShelf)).SavePath + bk.(Owner as TBookShelf).BookTitle + FChapterTitle;
|
Re: Auf Feld der übergeordneten Klasse zugreifen
Auch wenn's funktioniert - ist das sinnvoll? Wenn andere Klassen den Zugriff auf private-Felder benötigen, dann sollte der Zugriff doch wohl besser über properties erfolgen, oder?
|
Re: Auf Feld der übergeordneten Klasse zugreifen
Danke für eure Antworten,
(wie immer gibts dabei ein) aber: Zitat:
Zitat:
Danke für eure Hilfe, hier habe ich immer wieder gerne Probleme :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz