Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Typdeklaration array und normaler Typ gleichzeitig (https://www.delphipraxis.net/130599-typdeklaration-array-und-normaler-typ-gleichzeitig.html)

R2009 11. Mär 2009 05:31


Typdeklaration array und normaler Typ gleichzeitig
 
Hi alle,

ich habe in einem Beispiel folgendes gesehen:

Trealarray ist als Klasse definiert (wie weiss ich nicht).
t:Trealarray;

Zugriff einmal t[i,j]:=... als array und gleichzeitig t.xmax als Funktion mit Rückgabewert.

sowas wie t[i,j].wert hätt ich ja verstanden.
Wie macht man sowas?

Über eine Antwort würde ich mich freuen!

Uwe Raabe 11. Mär 2009 07:07

Re: Typdeklaration array und normaler Typ gleichzeitig
 
Das geht über das sogenannte Default Array Property. Schau dir mal das Property Items in TList an.

R2009 11. Mär 2009 09:32

Re: Typdeklaration array und normaler Typ gleichzeitig
 
Hi,

ich komm da nicht weiter. Vielleicht fehlt mir auch das nötige Wissen. Ich habe eine eigene Klasse Ttest mit einem default property erzeugt.
Hab das so behandelt wie ich Propertys immer behandle.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, math, StdCtrls;

type
  Ttest = class
  private
    { Private-Deklarationen }
    constructor create;
    function iget(Index: Integer): integer;
    procedure iput(Index: Integer; Item: integer);
    //ig:array of integer;
  public
    { Public-Deklarationen }
    property I[Index: Integer]: integer read iGet write iPut; default;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  s:Ttest;

implementation

{$R *.dfm}
constructor Ttest.create;
begin
  //setlength(I,10);
end;

function Ttest.iget(Index: Integer): integer;
begin
  result:=I[Index];
end;

procedure Ttest.iput(Index: Integer; Item: integer);
begin
  I[Index]:=Item;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  label1.caption:=inttostr(s[10]);
end;

procedure TForm1.FormCreate(Sender: TObject);
var f:double;tl:tlist;
begin
  s:=TTtest.Create;
  s[1]:=0;
end;

end.
Irgendwo muss ich dem Teil doch mitteilen wie gross das Array sein soll. Sobald ich in create setlength einfüge verlangt er nach dem I ein "[".

Kann mir jemand helfen?

Danke im Vorraus!

sirius 11. Mär 2009 09:37

Re: Typdeklaration array und normaler Typ gleichzeitig
 
Du musst auch irgendwo ein Feld haben:
Delphi-Quellcode:
type
  Ttest = class
    constructor create; //der ist selten private
  private
    { Private-Deklarationen } 
    FI:array of Integer; //das Feld zum Property
    function iget(Index: Integer): integer;
    procedure iput(Index: Integer; Item: integer);
    //ig:array of integer;
  public
    { Public-Deklarationen } 
    property I[Index: Integer]: integer read iGet write iPut; default;
  end;


constructor Ttest.create;
begin
  setlength(FI,10);
end;

function Ttest.iget(Index: Integer): integer;
begin
  result:=FI[Index];
end;

procedure Ttest.iput(Index: Integer; Item: integer);
begin
  FI[Index]:=Item;
end;

R2009 11. Mär 2009 10:14

Re: Typdeklaration array und normaler Typ gleichzeitig
 
Hi,

vielen Dank hab's begriffen!

Danke für die Mühe!

guidok 11. Mär 2009 11:34

Re: Typdeklaration array und normaler Typ gleichzeitig
 
Nur ganz nebenbei...

Es ist grundsätzlich nicht schlecht sich an gewisse Konventionen zu halten, damit Menschen, die dir auf eine Frage helfen sollen, einen leichteren Einstieg in dein Projekt bekommen.

Getter und Setter Methoden werden im der Regel mit GetIrgendwas und SetIrgendwas bezeichnet und dem Feld auf das sie sich beziehen (wie auch im Beispiel von sirius) wird ein großes "F" vorgestellt.

Es ist ganz praktisch, dies so zu handhaben, weil alle sofort auf einen einheitlichen Stand sind.

R2009 12. Mär 2009 05:07

Re: Typdeklaration array und normaler Typ gleichzeitig
 
Hi,

war mir klar, hab das im Beispiel, verschlampt.

Danke für die Info!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 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