![]() |
Delphi-Version: 7
Index für 2-dimensionale Arrayproperty
Hallo,
Ich hab da mal ein kleines Problem. Ich weiß wie ich "Arrayproperties" mit meheren Indizies erstelle. Dabei gibt es ja auch die Möglichkeit bei einer ebensolchen Property die dahinterstehende Funktion direkt mit einem bestimmten Index aufzurufen. Das ganze sieht dann in etwa so aus:
Delphi-Quellcode:
Gibt es auch eine Möglichkeit das für zwei (oder sogar drei Indizes) zu machen?
type
TTestClass = class function GetSomething(index: integer):integer; property a: integer index 5 read GetSomething; end; Also in etwa so:
Delphi-Quellcode:
Aber der Compiler weigert sich (vermutlich zu Recht :?) das ganze so zu kompilieren. :(
type
TTestClass = class function GetSomething(index1, index2: integer): integer; property a: integer index 5,1 read GetSomething; end; Jetzt frage ich mich, gibt Delphi so etwas überhaupt her? Wenn ja, wie müsste die Syntax dann lauten? |
AW: Index für 2-dimensionale Arrayproperty
Dort kann man nunmal nur einen Wert angeben.
Du kannst das höchstens mathematisch lösen.
Delphi-Quellcode:
Abgesehn davon, daß dieses kein Array-Property ist, sondern das
... index 0101 ...
Index1 := Index mod 100; Index2 := Index div 100;
Delphi-Quellcode:
.
property name[...]: typ ...
|
AW: Index für 2-dimensionale Arrayproperty
Danke für die Antwort.
Das ich dort nur einen Wert angeben kann ist wirklich schade :( Vor allem da die mathematische Lösung bei größeren Zahlen nicht mehr funktioniert. Bezüglich der "Arrayproperty", ich wusste nicht so recht wie ich das nennen sollte... und da es (zumindest für mich) ganz grob in etwa die gleiche Richtung ging, hab ich es mal so bezeichnet :) Ich programmiere Delphi jetzt noch nicht sooo lange. Von daher bin ich in Sachen Begrifflichkeiten noch nicht allzu trittsicher... Auf jeden Fall ist die Sache für mich damit jetzt geklärt :) |
AW: Index für 2-dimensionale Arrayproperty
Mehr als 4 Milliarden Property wirst du bestimmt nicht anlegen.
Dann bliebe noch durchzählen und dann z.B. über ein CASE deine Werte zuweisen.
Delphi-Quellcode:
property ... index 1 read MyGetter ...;
property ... index 2 read MyGetter ...; procedure TMyClass.MyGetter(Index: Integer); begin case Index of 1: ...; 2: ...; end; ... end; |
AW: Index für 2-dimensionale Arrayproperty
Zitat:
Ist dir klar, wozu man das Schlüsselwort "index" überhaupt benützt? In dem Beispiel werden 5 Properties auf die gleiche Get-Funktion umgebogen.
Delphi-Quellcode:
Mal angenommen das vermisste Sprachfeature würde es geben, dann sähe der Code so aus:
TTestClass = class
private function GetSomething(index: integer): integer; public property SpeedX: integer index 1 read GetSomething; property SpeedY: integer index 2 read GetSomething; property PositionX: integer index 3 read GetSomething; property PositionY: integer index 4 read GetSomething; property Acceleration: integer index 5 read GetSomething; end;
Delphi-Quellcode:
Wäre es erlaubt so zu programmieren, täte man sich damit aber keinen Gefallen weil diese Deklaration total unübersichtlich wird.
TTestClass = class
private function GetSomething(index1, index2: integer): integer; public property SpeedX: integer index 1,0 read GetSomething; property SpeedY: integer index 1,1 read GetSomething; property PositionX: integer index 2,0 read GetSomething; property PositionY: integer index 2,1 read GetSomething; property AccelerationX: integer index 3,0 read GetSomething; end; |
AW: Index für 2-dimensionale Arrayproperty
Zitat:
Ich bin halt letztens über diesen Index gestolpert und hab mich gefragt, ob das ganze nicht auch mit mehreren Indizes funktionieren würde. Zugegeben man braucht es eher selten, aber es hat mich halt mal interessiert. Zitat:
Aber ich glaub ich verstehe, dass es nicht sinnvoll ist, alle Properties auf eine Get-Funktion umzubiegen. Das würde in der Tat leicht unübersichtlich werden. |
AW: Index für 2-dimensionale Arrayproperty
Zitat:
Ein Sprachkonstrukt zu verbieten, nur weil man damit unübersichtlich programmieren kann, ist einfach kurzsichtig. Man kann schließlich mit jeder Programmmiersprache unübersichtlich programmieren. |
AW: Index für 2-dimensionale Arrayproperty
Deine Bits und Bytes kannst Du doch wunderbar mit einem Index umsetzen:
Delphi-Quellcode:
Property Bit0OfFirstByte : boolean index 00 ...
Property Bit7OfFirstByte : boolean index 07 ... Property Bit0OfSecondByte : boolean index 10 ... Property Bit7OfSecondByte : boolean index 17 ... |
AW: Index für 2-dimensionale Arrayproperty
Zitat:
IMHO gibt es keinen Grund an der Stelle nicht mehrere Indexeinträge zu erlauben. Wenn das jemand zu unübersichtlich ist, muss er es ja nicht verwenden. |
AW: Index für 2-dimensionale Arrayproperty
Ok, wenn man 2 Dimensionen zulassen würde, warum dann nicht auch 3 oder mehr Dimensionen?
Man sollte aber bedenken, dass man schon bei einer Dimension von z.B. 5 * 8 ganze 40 Properties hinschreiben muss. Hier sollte gleich ein kleines Alarmglöckchen leuten: "Eine Klasse mit 40 Properties? Und alle vom gleichen Typ? Da stimmt doch was nicht, da muss es doch auch einen anderen Weg geben" Das Schlüsselwort "Index" ist doch eher ein selten genutzes Feature mit relativ wenig Nutzen. Borland hätte stattdessen folgende Property-Deklaration einführen sollen:
Delphi-Quellcode:
TDirection = (dX, dY);
TTestClass = class private procedure SetSomething(value: integer; typ:Char; dir:TDirection): integer; function GetSomething(typ:Char; dir:TDirection): integer; public property SpeedX: integer read GetSomething('S', dX); property SpeedY: integer read GetSomething('S', dY); property PositionX: integer read GetSomething('P', dX) write SetSomething('P', dX); property PositionY: integer read GetSomething('P', dY) write SetSomething('P', dY); property AccelerationX: integer read GetSomething('A', dX); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz