![]() |
Delphi-Version: XE2
Wer und was ruft alles TList.Pack() auf (und warum?)
Elementares Verhalten einer elementaren Klasse. Und ich finde nichts konkretes.
Folgendes: Ich dachte, ich sei schlau und füge einer
Delphi-Quellcode:
ab und an auch mal ein eine Nullreferenz hinzu:
TObjectList
Delphi-Quellcode:
. Das Anfügen scheint allerdings immer einen
Add(nil)
Delphi-Quellcode:
-Befehl auszuführen: Die Nullzeiger werden hier wohl herausgeworfen. Dabei waren doch gerade die Teil meiner ausgefuchsten Überlegungen! :|
Pack()
Das DocWiki spricht zu
Delphi-Quellcode:
:
Pack()
Zitat:
Delphi-Quellcode:
jetzt den Hinweis, dass
Add()
Delphi-Quellcode:
überhaupt aufgerufen wird. Insgesamt auch, welche Methoden noch auf ein Pack() zurückgreifen. Und ob ich das vielleicht auch abstellen kann.
Pack()
Doch Ihr werdet mir sicher weiterhelfen können. :smile2: |
AW: Wer und was ruft alles TList.Pack() auf (und warum?)
Zitat:
![]() Nehmen wir mal an, bei den Objekte handle es sich um Spielfiguren, die sich selbst zeichnen können.
Delphi-Quellcode:
Anstatt nil werden jetzt bei Bedarf Objekte der Klasse TNullGameObj eingefügt.
TGameObj = class(TObject)
public procedure Paint2Canvas(canvas:TCanvas);virtual; abstract; end; TNullGameObj = class(TGameObj) public procedure Paint2Canvas(canvas:TCanvas);override; end; procedure TNullGameObj.Paint2Canvas(canvas:TCanvas); begin // nichts tun end; Das hat den Vorteil dass man später keine Fallunterscheidung benötigt und Null-Objekte genau gleich wie alle anderen Objekte behandeln kann. |
AW: Wer und was ruft alles TList.Pack() auf (und warum?)
Zitat:
Edit: wir reden doch hier über System.Contnrs.TObjectList? |
AW: Wer und was ruft alles TList.Pack() auf (und warum?)
Liste der Anhänge anzeigen (Anzahl: 4)
Nein, die Objektliste ist parametrisiert und stammt somit aus
Delphi-Quellcode:
. Macht das einen Unterschied?
System.Generics.Collections
Noch einmal ein ganz einfaches Beispiel:
Ich habe mal als vier Bilder angehängt, was man im Aufrufstack bzw. im Quelltext-Editor sieht. Ich verstehe es nicht. Edit: Bei Niklaus Wirths Lendenschurz, kann es sein, dass Pack() tatsächlich nie aufgerufen wird? Ich habe mich mit dem Delphi-Debugger noch nicht richtig anfreunden können, er scheint oft eine Zeile zu weit unten zu markieren. Wenn man auf das letzte Bild schaut - Meint der Debugger in Wirklichkeit die Notify-Methode? Das würde vollkommen Sinn machen. |
AW: Wer und was ruft alles TList.Pack() auf (und warum?)
Prüf doch einfach, ob nach dem Add der Count auf 1 steht.
|
AW: Wer und was ruft alles TList.Pack() auf (und warum?)
Ja, es ist alles im grünen Bereich :thumb:
Ich bin nur wieder aufgeschreckt, da mir der Debugger wieder "eine Funktion zu weit nach unten" gerutscht ist und behauptet hat, er würde gerade in
Delphi-Quellcode:
stecken, statt
meineListe.Pack()
Delphi-Quellcode:
.
meineListe.Notify()
Delphi-Quellcode:
wurde tatsächlich nie angefasst, so wie es sein sollte.
Pack()
Vielen Dank für die Teilnahme :) Und ja, eine eigene Nullinstanz wäre sicher besser, ich war bislang nur zu faul :stupid: Und für diese komische Debugger-Sache mache ich bei Gelegenheit (und Notwendigkeit) noch einmal ein neues Thema auf, das bringt mich wirklich durcheinander... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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-2025 by Thomas Breitkreuz