Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Herausfinden, um welchen ArrayIndex es geht


IhopeonlyReader - Sa 28.07.12 22:44
Titel: Herausfinden, um welchen ArrayIndex es geht
Guten Tag... schön vor sich hin Programmiert, fällt plötzlich auf, dass ich nicht weiß, um welchen Array es in derProzedure gerade geht... Beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
//in Prozedure 1
For C:=1 to 10 do
 begin
 BeispielArray[C].Prozedure2;
 end;

//in Prozedure 2
procedure Beispiel.Prozedure2;
begin
Showmessage('Der BeispielArrayIndes ist'+ ???);
end;


ich kenne dazu mehrere Möglichkeitne:
1. Bei dem Constructor einbauen, welcher Index es ist
Beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
constructor Beispiel.Create(derIndex: Integer);
begin
BeispielIndex := derIndex; //BeispielIndex wäre dann eine privat Variable der Klasse Beispiel
end;
//Dann wäre es möglich in Porzedure2 folgendes zu schreiben
Showmessage('Der BeispielArrayIndes ist'+ IntToStr(BeispielIndex));


Eine Andere nöglichkeit wäre die oben verwendete counter variable (in diesem Fall C) mit zu übergeben
dann säh prouedure 2 so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
//Prozedure 1
For C:=1 to 10 do
 begin
 BeispielArray[C].Prozedure2(C);
 end;

//in Prozedure 2
procedure Beispiel.Prozedure2(derIndex: Integer);
begin
Showmessage('Der BeispielArrayIndes ist'+ IntToStr(derIndex));
end;


Edit:
Oder man ändert eine schon vorhandene Variable, guckt weleche sich verändert hat (in dem man vorher und nacher alle durchgeht) und setz sie dannach wieder zurück... aber das ist ebenfalls sehr umstädnlich

aber ich denke, dass es einfacher geht oder? gibt es dazu eine Feste Variable/Konstante?


Gausi - Sa 28.07.12 23:12

Wenn ein Objekt seinen Index in einer übergeordneten Struktur für eine bestimmte Prozedur wissen muss, dann ist das imho nicht ganz sauber konzeptioniert. ;-)

Eine Notlösung hst du schon genannt - über den zusätzlichen Parameter. Das zusätzliche Feld im Konstruktor zu befüllen halte ich für arg ungeeignet, denn das dürfte später zu merkwürdigen Fehlern führen (z.B. wenn das Array verändert wird).

Besser wäre vermutlich, die "Prozedure2" als Methode einer passenden Array-Klasse zu gestalten, die die "Beispiel"-Objekte verwaltet und damit direkt auch die Indizes kennen kann.


IhopeonlyReader - Sa 28.07.12 23:24

die Prozedure 2 liegt jetz da wo auch der Aufruf stattfindet, daher kenn ich den Index nicht..

ebenfalls wird Prozedure 2 aber bei mir auch von einer anderen Klasse aufgerufen, hierzu wird der Index IMMER schon mit übergeben...

Beispiel

Delphi-Quelltext
1:
2:
3:
For C:=1 to 100 do
if X then 
handeln(C);


allerdings:
wird in einer zu der selben Klasse wie handeln gehörend handeln auch auferufen.. hier war der Index nicht bekannt..

ich habe das ganze jetz mit overload gelöst...

wenn sie nicht aus derseben klasse kommen, gib ich den Index an, wenn es aus der selben Klasse kommt, lass ich sie weg, denn da brauch ich dann ha nichts zum aufrufen...