AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList.Capacity Zuweisung?

Ein Thema von PeterPanino · begonnen am 28. Dez 2012 · letzter Beitrag vom 29. Dez 2012
Antwort Antwort
Seite 1 von 2  1 2      
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#1

TStringList.Capacity Zuweisung?

  Alt 28. Dez 2012, 01:04
Delphi-Version: XE2
Wieso ist in TStringList SetCapacity eigentlich nicht definiert? Gibt es einen speziellen Grund dafür?
Delphi-Quellcode:
procedure TStrings.SetCapacity(NewCapacity: Integer);
begin
  // do nothing - descendents may optionally implement this method
end;
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
665 Beiträge
 
#2

AW: TStringList.Capacity Zuweisung?

  Alt 28. Dez 2012, 01:59
Meinst du jetzt TStringList oder TStrings?

TStringList (als Nachfahre von TStrings) hat es nämlich implementiert.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: TStringList.Capacity Zuweisung?

  Alt 28. Dez 2012, 02:19
Du bist da wohl klein wenig durcheinander gekommen. Bei TStringList steht in SetCapacity etwas (zumindest in D7). Bei TStrings nicht. Das ist der Vorfahr von TStringList.

Delphi-Quellcode:
procedure TStrings.SetCapacity(NewCapacity: Integer);
begin
  // do nothing - descendents may optionally implement this method
end;

procedure TStringList.SetCapacity(NewCapacity: Integer);
begin
  ReallocMem(FList, NewCapacity * SizeOf(TStringItem));
  FCapacity := NewCapacity;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TStringList.Capacity Zuweisung?

  Alt 28. Dez 2012, 10:55
Es steht doch im Kommentar . Die Alternative wäre gewesen, die Methode abstract zu deklarieren, aber dann muss jede abgeleitete Klasse sie implementieren. So kann jede Ableitung selbst entscheiden, ob sie das tut oder eben nicht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#5

AW: TStringList.Capacity Zuweisung?

  Alt 28. Dez 2012, 11:54
Die Alternative wäre gewesen, die Methode abstract zu deklarieren, aber dann muss jede abgeleitete Klasse sie implementieren. So kann jede Ableitung selbst entscheiden, ob sie das tut oder eben nicht.
Ich bin ja immer dafür, in einer Klasse (auch in einer Basisklasse) nur das zu deklarieren, was auch Sinn macht.
Wenn in der Basisklasse eine Methode keinen Sinn macht, sondern nur in einer speziellen geerbten Klasse, dann würde ich es in der Basisklasse einfach gar nicht deklarieren.

Das wäre so, als wenn ich in einer Klasse TKraftfahrzeug die Methode "Schwimmen" anbiete, obwohl das nur in der Klasse TAmphibienfahrzeug Sinn macht. Alle Kraftfahrzeuge haben jetzt die Methode Schwimmen, doch bei den meisten funktioniert diese eben nicht... Irgendwer kommt dann auf die Idee, mit einem TMotorrad in einen See zu fahren, weil es ja die Methode Schwimmen besitzt. (übertriebenes Beispiel )

Man könnte sogar so weit gehen, und noch eine zweite Klasse dazwischen hängen, falls es SetCapacity in mehreren Nachfahren geben soll...
TStrings > TGrowStrings > TStringList, TOtherStrings,...

Ob es da irgendeine Eigenheit bei ObjectPascal gibt, damit das keinen Sinn machen könnte, weiß ich nicht, aber in strengen OOP-Sprachen würde ich das so machen...
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: TStringList.Capacity Zuweisung?

  Alt 28. Dez 2012, 12:01
@Morphie

Ich sehe das genau umgekehrt, ein paar zusätzliche virtuelle Methoden und vor allem mehr Methoden virtuell statt statisch implementiert würde einem oft viel "gefrickel" ersparen.
Das von Dir gewählte (etwas extreme) Beispiel würde ich auch nicht implementiert haben wollen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TStringList.Capacity Zuweisung?

  Alt 28. Dez 2012, 12:04
Dir ist aber schon aufgefallen, dass es sich um den Setter der Property Capacity handelt? Da kannst Du wenn überhaupt höchstens die ganze Property in der Basisklasse weglassen, zumindest fällt mir auf die Schnelle keine saubere Alternative ein. Irgendwer bei (wahrscheinlich noch) Borland wird sich dabei schon etwas gedacht haben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#8

AW: TStringList.Capacity Zuweisung?

  Alt 28. Dez 2012, 12:07
Dir ist aber schon aufgefallen, dass es sich um den Setter der Property Capacity handelt?
Jo, ist mir bewusst... wenn ich von SetCapacity schreibe, meine ich natürlich die gesamte Property, die in der Basisklasse aber sonst nirgends genutzt wird, daher für mich überflüssig...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: TStringList.Capacity Zuweisung?

  Alt 28. Dez 2012, 12:09
Ich denke hier ist es nicht sinnvoll ein capacity-property schon in der Basisklasse einzuführen. Diese Property macht dort keinen Sinn da sowas zu sehr an die Speicherorganisation von TStringList (Dumme Pointerlist statt performanterer Tree oder Hashmap) angelehnt ist.

Willst du mit Variablen vom Typ TStrings arbeiten aber wenn es nötig ist die Capacity (vor-)belegen wäre ein setzen mit den RTTI-Funktionen möglich. Haben uns selbst SetIntProperty-Funktionen gebastelt um nur bei Klassen mit entsprechenden Properties diese zu setzen und bei fehlen einfach nix zu machen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: TStringList.Capacity Zuweisung?

  Alt 29. Dez 2012, 16:49
Der Grund meiner Frage war folgender: Wenn man in einer StringList die Capacity z.B. auf den Wert 10 einstellt, sollten beim StringList.LoadFromFile maximal 10 Zeilen gelesen werden (auch wenn die Datei etwa 100 Zeilen hat). Wäre eine solche Vorgangsweise möglich? Oder müsste man dazu eher die Methode LoadFromFile überschreiben?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz