AGB  ·  Datenschutz  ·  Impressum  







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

Klasse mit mehreren "ebenen"?

Ein Thema von alienous · begonnen am 20. Jul 2006 · letzter Beitrag vom 21. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
alienous

Registriert seit: 27. Jan 2006
94 Beiträge
 
#1

Klasse mit mehreren "ebenen"?

  Alt 20. Jul 2006, 20:58
hi,


sitze gerade so an einer klasse, wo ich empfänger-daten und sender-daten und noch viele andere werte speichern möchte. da hab ich mich gefragt, wieso erstellste nich ein record mit name, straße, plz, ort usw, und setzt es einmal für den absender, und einmal für den empfänger usw ein, damit man das ungefähr so ansprechen kann:

Delphi-Quellcode:
Bestellung1 := TBestellung.Create;

Bestellung.Absender.Name := 'xyz';
Bestellung.Emfpaenger.PLZ := 52365;
Bestellung.BestellNr := 558712;
usw...
doch leider funktioniert das mit den records nicht so, wie ich es mir vorgestellt habe, habe mich ja vorher hier ein wenig informiert

also wie würdet ihr das lösen?
danke für die tipps schonmal!!

achja, weiß gerade nicht, wie ich das thema besser umschreiben kann, drumm hab ich "ebenen" genutzt, wenn ihr ne passendere beschreibung habt, her damit
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Klasse mit mehreren "ebenen"?

  Alt 20. Jul 2006, 21:01
Wie sieht die deklaration der Klasse und des Record aus?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Klasse mit mehreren "ebenen"?

  Alt 20. Jul 2006, 21:02
Na das ist doch eigentlich ganz einfach:

Delphi-Quellcode:
type
  TAbsender = record
    Name: String;
  end;

  TEmpfaenger = record
    PLZ: Cardinal;
  end;

  TBestellung = class
  ...
  public
    Absender: TAbsender;
    Empfaenger: TEmpfaenger;
  ...
  end;
Sollte so funktionieren.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Klasse mit mehreren "ebenen"?

  Alt 20. Jul 2006, 21:02
Zitat von alienous:
doch leider funktioniert das mit den records nicht so, wie ich es mir vorgestellt habe, habe mich ja vorher hier ein wenig informiert

also wie würdet ihr das lösen?
Ganz auf Records verzichten und dafür Unterklassen benutzen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
alienous

Registriert seit: 27. Jan 2006
94 Beiträge
 
#5

Re: Klasse mit mehreren "ebenen"?

  Alt 20. Jul 2006, 21:07
Zitat von 3_of_8:
Na das ist doch eigentlich ganz einfach:

Delphi-Quellcode:
type
  TAbsender = record
    Name: String;
  end;

  TEmpfaenger = record
    PLZ: Cardinal;
  end;

  TBestellung = class
  ...
  public
    Absender: TAbsender;
    Empfaenger: TEmpfaenger;
  ...
  end;
Sollte so funktionieren.
ja, aber wenn ich ne property dazu noch schreiben will, die mir zb die werte untersucht (gültige plz etc..) dann gehts nicht mehr, weil man scheinbar dann nur lesen kann.
Zitat von mkinzler:
Wie sieht die deklaration der Klasse und des Record aus?
war jetzt nur theorie, wie man das lösen könnte. über property gehts jedenfalls nicht, höchstens wenn man die records public macht.

Zitat von Khabarakh:
Ganz auf Records verzichten und dafür Unterklassen benutzen.
ah, ich glaub ich verstehs danke
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Klasse mit mehreren "ebenen"?

  Alt 20. Jul 2006, 21:53
Hi,

Wenn Du einfach nur die Daten speichern willst geht das doch Problemlos mit einem Record.

Delphi-Quellcode:
type
  TAbsender = record
    Name: string;
    PLZ: Cardinal;
  end;
  TEmpfaenger = record
    PLZ: Cardinal;
  end;
  TBestellung = record
    Absender: TAbsender;
    Empfänger: TEmpfaenger;
  end;

....

procedure TForm1.Button1Click(Sender: TObject);
var Bestellung: TBestellung;
begin
  if CheckBestellDaten then begin
     Bestellung.Absender.Name:= 'Name';
     Bestellung.Absender.PLZ:= 55555;
     Bestellung.Empfänger.PLZ:= 55555;
  else
     Showmessage('Bitte überprüfen Sie das Formular.'); //ka ob deine Daten von einem Formular stammen ;)
end;
Eine Klasse würde ich nur hernehmen um einen array von TBestellung zu verwalten/durchsuchen oder einzelne Datensätze abzuspeichern.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Klasse mit mehreren "ebenen"?

  Alt 20. Jul 2006, 22:02
Nenene, von Property war nicht die Rede.

Mit ner Property kannst du nur den GANZEN Record setzen, nicht Teile davon.

Dann musst du ne Klasse nehmen, was in diesem Fall kein Problem ist, schreib einfach in den Konstruktor für TEmpfaenger und TAbsender jeweils ein Create und im Destructor ein Free rein.

Achja: Und wenn du die Records public machst, getzt trotzdem nicht mit Propertys.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#8

Re: Klasse mit mehreren "ebenen"?

  Alt 20. Jul 2006, 22:54
Zitat von 3_of_8:
Dann musst du ne Klasse nehmen, was in diesem Fall kein Problem ist, schreib einfach in den Konstruktor für TEmpfaenger und TAbsender jeweils ein Create und im Destructor ein Free rein.
Wie soll das dann aussehen ??
  Mit Zitat antworten Zitat
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Klasse mit mehreren "ebenen"?

  Alt 21. Jul 2006, 09:03
Zitat von 3_of_8:
Mit ner Property kannst du nur den GANZEN Record setzen, nicht Teile davon.
Wieso sollte das nicht gehen?
Delphi-Quellcode:
type
  TAbsender = packed record
    Name: string[255];
    PLZ: Cardinal;
  end;

  TAbsenderClass = class(TObject)
  private
    absender: array of TAbsender; // oder TObjectList
    function GetName(const Index: Integer): string;
    procedure SetName(const Index: Integer; const Value: string);
    function GetPLZ(const Index: Integer): Cardinal;
    procedure SetPLZ(const Index: Integer; const Value: Cardinal);
  public
    property Name: string index 0 read GetName write SetName;
    property PLZ: Cardinal index 1 read GetPLZ write SetPLZ;
    //..
  end;
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Klasse mit mehreren "ebenen"?

  Alt 21. Jul 2006, 09:41
@Phantom1

Die Index-Direktive ist nur sinnvoll, wenn die Properties sich einen Getter/Setter teilen. Wenn du aber über den Index auf die Elemente des Arrays zugreifen möchtest, dann besser so:

Delphi-Quellcode:
type
  TAbsender = packed record
    Name: string[255];
    PLZ: Cardinal;
  end;

  TAbsenderClass = class(TObject)
  private
    absender: array of TAbsender; // oder TObjectList
    function GetName(aIndex: Integer): string;
    procedure SetName(aIndex: Integer; const aValue: string);
    function GetPLZ(aIndex: Integer): Cardinal;
    procedure SetPLZ(aIndex: Integer; aValue: Cardinal);
  public
    property Name [aIndex: integer]: string read GetName write SetName;
    property PLZ [aIndex: integer]: Cardinal read GetPLZ write SetPLZ;
    //..
  end;
Gruß Hawkeye
  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 00:17 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