AGB  ·  Datenschutz  ·  Impressum  







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

Property die Rekord zurückgibt

Ein Thema von Pseudemys Nelsoni · begonnen am 19. Nov 2004 · letzter Beitrag vom 19. Nov 2004
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Property die Rekord zurückgibt

  Alt 19. Nov 2004, 18:33
moin,

sagen wir mal ich habe folgendes:

Delphi-Quellcode:
type
  TMyRecord = record
    str: string;
  end;

  TRecords = array of TMyRecord;

  TMyClass = class(TObject)
  private
    fRecords: TRecords;
  public
    function GetRecord(idx: integer): TMyRecord;
    property Records[idx: integer]: TMyRecord read GetRecord; default;
  end;

...


function TMyClass.GetRecord(idx: integer): TMyRecord;
begin
  if (not(idx < low(fRecordArray))) and (not(idx > high(fRecordArray))) then
    result := fRecordArray[idx];
end;


wenn ich nun eine instanz von "TMyClass" habe (MyCLass) und möchte im array mein zweiten Rekord ansprechen (MyClass.Records[1]) und dessen string ändern (MyClass.Records[1].str := 'irgendwas') dann schreibe ich doch nicht wirklich in meinem array oder? denn soweit ich weiss gibt die funktion GetRecord eine KOPIE des records zurück und bezieht sich nicht aufs array. meine idee wär nun gewesen einen pointer auf diesen typ zu definieren (PMyRecord = ^TMyRecord) und mir in der funktion PRecord zurückgeben lasse...

aber kann ich dann ein rekord überhaupt noch so ansprechen: "MyClass.Record[1].str" ? Muss ich dann nicht (): "MyClass.Record[1]^.str" benutzen?
Mario
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Property die Rekord zurückgibt

  Alt 19. Nov 2004, 18:39
Zitat von Pseudemys Nelsoni:
moin,
...
aber kann ich dann ein rekord überhaupt noch so ansprechen: "MyClass.Record[1].str" ? Muss ich dann nicht (): "MyClass.Record[1]^.str" benutzen?
Moin,

das geht beides, da der compiler sich dann halt denkt, das du das ^ vergessen hast


//edit: PS: wenn du einen pointer nimmst, dann kann es aber passieren, das da NIL zurück kommt, es sei denn du raised eine exception, wenn der index 'out of bounds' ist. Wäre das sauberste! Dann kannst du die annahme treffen, das er niemals NIL sagt
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Property die Rekord zurückgibt

  Alt 19. Nov 2004, 18:45
moin maximov, danke für deine antwort

@exception, das habe ich bereits und sogar mit der gleichen fehlermeldung wie du sie gerade beschrieben hast hatte es hier nur alles rausgemacht was unwichtig war
Mario
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: Property die Rekord zurückgibt

  Alt 19. Nov 2004, 19:39
Also wenn deine Property einen Record (keinen Pointer zurück gibt) dann kannst du direkt lesend auf ein Element zugreifen.

Ein schreibender Zugriff wird allerdings abgewiesen.

Also

Delphi-Quellcode:
ShowMessage(MyClass.Record[1].str) // funktioniert
MyClass.Record[1].str:='Hallo// funktioniert nicht
P.S: Aber das hätte man doch durch einfaches ausprobieren schneller rausbekommen
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: Property die Rekord zurückgibt

  Alt 19. Nov 2004, 21:03
hallo jim,

das geht nicht, er verlangt beim read eine prozedur
Mario
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Property die Rekord zurückgibt

  Alt 19. Nov 2004, 21:06
Hab mich auch vertippt. Müsste natürlich Records statt record heissen.

P.S: Wenn du es mit Properties machst musst du nicht die Read Prozedur in den Public Abschnitt machen.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  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:49 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