AGB  ·  Datenschutz  ·  Impressum  







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

array-Properties

Ein Thema von nailor · begonnen am 6. Sep 2003 · letzter Beitrag vom 7. Sep 2003
Antwort Antwort
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#1

array-Properties

  Alt 6. Sep 2003, 15:32
Delphi-Quellcode:
//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.

...
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.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: array-Properties

  Alt 6. Sep 2003, 15:37
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]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von murphy
murphy

Registriert seit: 7. Aug 2003
Ort: Berlin
16 Beiträge
 
#3

Re: array-Properties

  Alt 6. Sep 2003, 15:41
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:
procedure SetValue(const Index: Integer; const Value: string);
begin
  if High(FValues) < Index then
    SetLength(FValues, Index+1);
  FValues[Index] := Value;
end;
lies dir in der hilfe unbedingt auch den oberen teil durch. dort sind beispielzugriffsmethoden beschrieben.
{$DEFINE MURPHY_BEST_REGARDS}
herr ober, das steak ist C!
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#4

Re: array-Properties

  Alt 6. Sep 2003, 16:37
Ich glaube ich habe da was ganz grundlegendes falsch verstanden:

Delphi-Quellcode:
type

  TStringArray = class
  public
    property Strings[Index: Integer]: string ...; default;
    ...
  end;
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.

--> 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!
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von murphy
murphy

Registriert seit: 7. Aug 2003
Ort: Berlin
16 Beiträge
 
#5

Re: array-Properties

  Alt 6. Sep 2003, 17:58
ok, vielleicht geht's besser mit codebeispielen ohne "..." an den wichtigen stellen:
Code:
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;
gekürzt, ohne override etc.
so ungefähr sehen TStrings und TStringList aus.
{$DEFINE MURPHY_BEST_REGARDS}
herr ober, das steak ist C!
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6

Re: array-Properties

  Alt 6. Sep 2003, 18:25
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!
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von murphy
murphy

Registriert seit: 7. Aug 2003
Ort: Berlin
16 Beiträge
 
#7

Re: array-Properties

  Alt 6. Sep 2003, 22:26
Zitat von Nailor:
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.
du meinst, dass du eine property benennst, default dahinter schreibst und die klassenergänzung den rest macht? mmh...da haben die entwickler sich wohl gegen "künstliche intelligenz" entschieden, weil es hier einfach zu viele mögliche varianten gibt. ich benutze die automatische codeerzeugung fast nie, die makros (STRG+J) sind wesentlich nützlicher.

Zitat:
Trotzdem Vielen Dank, denn wenigstens klappts jetzt!
schön was wird es eigentlich?
{$DEFINE MURPHY_BEST_REGARDS}
herr ober, das steak ist C!
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#8

Re: array-Properties

  Alt 6. Sep 2003, 22:36
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.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: array-Properties

  Alt 7. Sep 2003, 00:09
Moin Nailor,

Zitat von Nailor:
-> lohnt sich nicht, zumal da noch abstract-Methoden drin sind,
und das ist der Fall, da es als Basisklasse für weitere Ableitungen dienen soll. Du musst halt in einer abgeleiteten Klasse die abstrakten Methoden implementieren. Auch Borland hat das unterschiedlich gemacht. In den Lines (abgeleitet von TStrings) eines Memos oder RichEdit werden z.B. keine Objekte gespeichert, in ListBox.Items schon, obwohl beide über AddObject verfügen.

Zitat von Nailor:
Außerdem machen wir jetzt in der Schule grade Objektorientierung, da kann es nicht schaden, wenn ich mich auch mal damit beschäftige.
Da hast Du wohl recht.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:31 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