AGB  ·  Datenschutz  ·  Impressum  







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

Klassen-Eigenschaft als Array

Ein Thema von RWarnecke · begonnen am 18. Okt 2007 · letzter Beitrag vom 19. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Klassen-Eigenschaft als Array

  Alt 18. Okt 2007, 16:31
Hallo zusammen,

ich probiere mich gerade an Klassen. Ich habe mich schon durch ein paar Tutorials gewühlt. Eine Klasse zu erzeugen mit Eigenschaften und so weiter funktioniert auch wunderbar. Ich habe die Klasse wie folgt erstellt :
Delphi-Quellcode:
  TSample = class(TObject)
  private
    FWert1 : integer;
    FWert2 : integer;
  public
    constructor Create;
    property Wert1: integer read FWert1;
    property Wert2: integer read FWert2;
    procedure GetInfos;
  end;

constructor Create;
begin
  GetInfos;
end;

procedure GetInfos;
begin
  FWert1 := FWert1 + random(10);
  FWert2 := FWert2 + (Random(10) + FWert1);
end;
Wenn ich das ganze jetzt in mehrmals aufrufe, dann werden die Werte hintereinander geschrieben. Nun möchte ich die Ergebnisse von FWert1 und FWert2 in ein Array schreiben, so das die Eigenschaft Wert1 und Wert2 als array of integer ist. Wie mache ich aus der einfachen Integer-Wert-Eigenschaft ein Array Of Integer ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Klassen-Eigenschaft als Array

  Alt 18. Okt 2007, 16:39
z.B. über funktionen:
Delphi-Quellcode:
TSample = class(TObject)
  private
    FWert1 : integer;
    FWert2 : integer;
    function getWert(i:integer);
  public
    constructor Create;
    property Wert[i:integer]: integer read getWert;
    procedure GetInfos;
  end;

function TSample.getWert(i:integer);
begin
  case i of
    1: result:=FWert1;
    2: result:=FWert2;
    else raise Exception.create('Idiot');
  end;
end;
Da kann man natürlich auch die Variablen in ein Array legen.

Edit: kleiner Fehler behoben
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Klassen-Eigenschaft als Array

  Alt 18. Okt 2007, 16:41
Meinst du das so:

Delphi-Quellcode:
TSample = class(TObject)
  private
    FWert1 : integer;
    FWert2 : integer;
    function GetWert(idx: Integer): Integer;
  public
    constructor Create;
    property Wert[idx: Integer]: Integer read GetWert;
    procedure GetInfos;
  end;

function TSample.GetWert(idx: Integer): Integer;
begin
  case idx of
    0: result := FWert1;
    1: result := FWert2;
  end;
end;
@roter kasten:
och mennoooo :/ du warst schneller
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Klassen-Eigenschaft als Array

  Alt 18. Okt 2007, 16:42
Zitat:
@roter kasten:
och mennoooo :/ du warst schneller
aber du richtiger
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#5

Re: Klassen-Eigenschaft als Array

  Alt 18. Okt 2007, 16:46
hallo,

zuerst solltest du einen Typ TIntArray definieren:

type TIntArray = array of Integer;
Dann brauchst du ein Feld FIntArray: TIntArray. Jetzt musst du noch das Property definieren:

property IntArray[index: Integer]: TIntArray read GetInteger;

GetInteger ist dabei eine Getter-Funktion, die wie folgt definiert ist:

function GetInteger(Index: Integer): Integer;

Die Implementation für GetInteger sollte dan so lauten:

function TDeineKlasse.GetInteger(Index: Integer):Integer;
begin
if FIntArray <> nil then
if Length(FIntArray) < Index then
result := FIntArray[Index];
end;

Hoffe der Code ist selbstsprechend genug!

mfg,
heiopei

PS: du kannst auch mehrdimensionale Properties definieren, indem du statt FIntArray[Index: Integer] z.B. FIntArray[Breite, Tiefe: Integer] schreibst!
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Klassen-Eigenschaft als Array

  Alt 18. Okt 2007, 17:41
Zitat von sirius:
Zitat:
@roter kasten:
och mennoooo :/ du warst schneller
aber du richtiger
deine function hat immernoch keinen rückgabewert
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Klassen-Eigenschaft als Array

  Alt 18. Okt 2007, 17:42
Zitat von dominikkv:
deine function hat immernoch keinen rückgabewert
Das braucht die nicht, die ist viel klüger als deine
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Klassen-Eigenschaft als Array

  Alt 18. Okt 2007, 17:48
Zitat von sirius:
Zitat von dominikkv:
deine function hat immernoch keinen rückgabewert
Das braucht die nicht, die ist viel klüger als deine
ich meine das hier:
function getWert(i:integer);
Zitat:
[DCC Fehler] Unit1.pas(23): E2023 Funktion benötigt Ergebnistyp
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

Re: Klassen-Eigenschaft als Array

  Alt 19. Okt 2007, 15:00
Zitat von heiopei:
hallo,

zuerst solltest du einen Typ TIntArray definieren:

type TIntArray = array of Integer;
Dann brauchst du ein Feld FIntArray: TIntArray. Jetzt musst du noch das Property definieren:

property IntArray[index: Integer]: TIntArray read GetInteger;

GetInteger ist dabei eine Getter-Funktion, die wie folgt definiert ist:

function GetInteger(Index: Integer): Integer;

Die Implementation für GetInteger sollte dan so lauten:

function TDeineKlasse.GetInteger(Index: Integer):Integer;
begin
if FIntArray <> nil then
if Length(FIntArray) < Index then
result := FIntArray[Index];
end;

Hoffe der Code ist selbstsprechend genug!

mfg,
heiopei

PS: du kannst auch mehrdimensionale Properties definieren, indem du statt FIntArray[Index: Integer] z.B. FIntArray[Breite, Tiefe: Integer] schreibst!
Das hat mir sehr weitergeholfen. Danke. Jetzt ist nur noch die Frage, muss ich für jeden Eigenschaftsarray eine eigene Funktion schreiben ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#10

Re: Klassen-Eigenschaft als Array

  Alt 19. Okt 2007, 15:13
Hallo,
ja ich glaube schon, da du ja immer wissen musst, auf welches Feld du zugreifen musst, aus dem der Wert jeweils gelesen werden soll.

Es kann aber sein, das du noch was mit der Direktive "index" machen kannst. Erkundige dich mal in der OH, ich selbst hab das noch nie verwendet, ich weis nur das es das gibt.

mfg,
heiopei
  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 21:14 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