![]() |
array-Properties
Delphi-Quellcode:
jetzt sollte ich doch eigentlich irgendwie auf die strings in meinem array zugreifen können. d.h. sie auslesen, sie schreiben, und auch die Länge des arrays, in dem sie drinstehen ändern. Nur Teil 1 und Teil 2 kann ich nicht testen, weil Teil 3 (Länge des arrays, in dem sie drinstehen ändern) nicht klappt.
//aus der Hilfe:
... type TStringArray = class public property Strings[Index: Integer]: string ...; default; ... end; If a class has a default property, you can access that property with the abbreviation object[index], which is equivalent to object.property[index]. For example, given the declaration above, StringArray.Strings[7] can be abbreviated to StringArray[7]. A class can have only one default property. Changing or hiding the default property in descendant classes may lead to unexpected behavior, since the compiler always determines an object’s default property statically. ... |
Re: array-Properties
Moin Nailor,
i.d.R., z.B. bei TStringList, kannst Du die Grösse des Arrays nur durch das Hinzufügen und Löschen von Einträgen ändern, aber nicht direkt. Wie machst Du das denn? [EDIT] Und was hat der Auszug aus der Hilfe mit Deinem Problem zu tun? [/EDIT] |
Re: array-Properties
du hast da was falsch verstanden: array-properties haben mit arrays nur die zugriffssyntax per [] gemeinsam, sowas wie Memo1.Lines[3].
dennoch sind es properties, und du brauchst funktionen, um darauf zuzugreifen, und denen wird der index mit übergeben. wenn du die länge ändern willst, dann musst du das über eine zweite property tun. oder, viel besser, du setzt die länge in der set-prozedur der array-property:
Code:
lies dir in der hilfe unbedingt auch den oberen teil durch. dort sind beispielzugriffsmethoden beschrieben.
procedure SetValue(const Index: Integer; const Value: string);
begin if High(FValues) < Index then SetLength(FValues, Index+1); FValues[Index] := Value; end; |
Re: array-Properties
Ich glaube ich habe da was ganz grundlegendes falsch verstanden:
Delphi-Quellcode:
ist hierbei "Strings" schon eine Variable, oder muss ich erst noch eine Variable machen, die ich in einer passenden function/procedure mit der property verknüpfe.
type
TStringArray = class public property Strings[Index: Integer]: string ...; default; ... end; --> dennoch sind es properties, und du brauchst funktionen, um darauf zuzugreifen, und denen wird der index mit übergeben. Ich bin doch grade dabei, diese zu schreiben! |
Re: array-Properties
ok, vielleicht geht's besser mit codebeispielen ohne "..." an den wichtigen stellen:
Code:
gekürzt, ohne override etc.
interface
TSimpleStringList = class private FList: array of string; protected function Get(Index: Integer): string; procedure Put(Index: Integer; const S: string); public property Strings[Index: Integer]: string read Get write Put; default; end; implementation function TSimpleStringList.Get(Index: Integer): string; begin if (Index < 0) or (Index > High(FList)) then Error; Result := FList[Index]; end; procedure TSimpleStringList.Put(Index: Integer; const S: string); begin if (Index < 0) or (Index > High(FList)) then Error; FList[Index] := S; end; so ungefähr sehen TStrings und TStringList aus. |
Re: array-Properties
So hab ich es dann auch gemacht. Ich dachte halt am Anfang, dass Delphi so schlau wäre, und zb bei deinem Code automatisch eine Variable "Strings: array of string" gemacht hätte. Tut es aber nicht, und ist vielleicht von dem "Verwirrfaktor für doppelte Bezeichnungen" her auch besser.
Trotzdem Vielen Dank, denn wenigstens klappts jetzt! |
Re: array-Properties
Zitat:
Zitat:
|
Re: array-Properties
Was zum Suchen (siehe auch meine Fragen von wegen fehlerhafter Rekursion). Wollte es eigentlich von TStrings ableiten, oder TStringList ableiten. TStrings ist eigentlich nicht viel mehr als array of string, von dem ich die Sourcen nicht habe (Personal Edition) -> lohnt sich nicht, zumal da noch abstract-Methoden drin sind, usw. TStringList kann so viel, das ich mir gedacht habe: Das kann viel, das ist bestimmt nicht schnell. Außerdem machen wir jetzt in der Schule grade Objektorientierung, da kann es nicht schaden, wenn ich mich auch mal damit beschäftige.
|
Re: array-Properties
Moin Nailor,
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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