![]() |
array of record; bzw. arrays in OOP
Hallo
Es geht mir noch mal um diese Array of record – Konstruktion von ![]()
Delphi-Quellcode:
Für so ungewöhnlich halte ich das gar nicht. Klar kann man auch schreibenTTest4 = class(TObject) private Test: array of record i:integer; s:string; b:boolean; end; protected
Delphi-Quellcode:
Aber diesen Extra-Type braucht man nur für Übergaben in Proceduren etc., bei einer Direktzuweisung oder wenn dieser Type mehrfach verwendet werden soll. Wenn dieses nicht verwendet wird, braucht man diesen Extra-Type eigentlich gar nicht. Außerdem finde ich die Deklaration übersichtlicher, wenn alles in einer steht und ich mir nicht erst noch andere Typen anschauen muß.
Type Tmyrecord = record
i:integer; s:string; b:boolean; end; TTest4 = class(TObject) private Test: array of Tmyrecord Aber egal, jeder wie er möchte. Vielmehr interessiert mich: Zitat:
Zitat:
Auch interessiert mich, wenn arrays „verachtet“ sind, wie ihr mit einem völligen Verzicht auf Arrays programmieren wollt. Mfg Frank |
Re: array of record; bzw. arrays in OOP
Statt dem Record definierst du dir in OOP eine Klasse mit den Variablen des Records,
und instanzierst das ganze im jeden Array-Element oder verwendest TList oder TObjectList statt dem Array. |
Re: array of record; bzw. arrays in OOP
Zitat:
glaubnix |
Re: array of record; bzw. arrays in OOP
Zitat:
|
Re: array of record; bzw. arrays in OOP
Zitat:
TList beuntzt solchen *piep* als internen Array:
Delphi-Quellcode:
Am praktischsten finde ich immer noch linked Lists, die man hinter einer Collection ""versteckt".
TPointerList = array[0..MaxListSize - 1] of Pointer;
Arrays haben einen Vorteil gegenüber Listen: Random access. Man kann sehr schnell auf Element[X] zu greifen. Mit einer linked List kann es dir im dümmsten Fall passieren, dass du sie von ganz vorne/hinten bis dort durchlaufen musst (außer man führt den letzten Zugriff als "Cache" mit :zwinker: ) Das war's auch schon mit den Vorteilen von Arrays. Mir fällt dazu einfach nix positives mehr ein. :gruebel: Von Arrays kann man nicht ableiten. Arrays werden ständig kopiert, wenn sich ihre Größe ändert. eine Element in einem Arrays zu löschen ist verflucht hässlich. Und was an Records sparsamer sein soll weiß wohl auch keiner. Die Dinger werden bei Zuweisung KOPIERT! Alles was (Size > 10-20Bytes) gehört einfach nicht in einen Record. (Ich persönlich packe gar nichts in solchen Krempel ;) ) Bei Referenzen auf ein Objekt muss nur der Zeiger (4Bytes) kopiert werden. Aber ich halte mich jetzt lieber zurück. :roll: @maximov ich dachte Referenzen wären 4 Byte. :gruebel: |
Re: array of record; bzw. arrays in OOP
Zitat:
|
Re: array of record; bzw. arrays in OOP
Zitat:
|
Re: array of record; bzw. arrays in OOP
Zitat:
Zitat:
Zitat:
Zitat:
Ein record kann auf dem Stack liegen, eine class liegt ohne Tricks immer im Heap. Zitat:
Da hast du wohl zwei unterschiedliche Sachen verglichen. Wenn man die Daten einer Klasse kopieren will muss man sich auch noch selbst darum kümmern (was seine Vorteile hat), oder man muss "Move(yourInstance^, myInstance^, myInstance.InstanceSize);" aufrufen, was einer Wert-Zuweisung im Sinne einer Records-KOPIE entspräche. Zitat:
|
Re: array of record; bzw. arrays in OOP
Zitat:
Die dpCollection ist ganz nett um Einstellungen local zu speichern. Im Normallfall ist die Vorgabe von CollectionItem abzuleiten IMHO nicht zumutbar. Ich meine eine Klasse, die intern eine linked list verwaltet. Ohne dass man sich im eigentlichen Code darum kümmern muss. Abstraktes beispiel
Delphi-Quellcode:
var
Instance :TMyClass; begin MyClassCollection.Add(TMyClass.Create('eins')); MyClassCollection.Add(TMyClass.Create('zwei')); for Instance in MyClassCollection do WriteLn(Instance.SomeProperty); MyClassCollection.Clear(); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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