Entwickler-Ecke

Basistechnologien - Methode im Array aufrufen


paddy14 - Mi 27.07.11 11:17
Titel: Methode im Array aufrufen
Guten Tag Forum,

ich habe folgende Frage:

Damit ich nicht immer hunderte von if else Abfragen machen muss, dachte ich mir es muss doch eine andere Möglichkeit geben.
Ich hatte da an sowas gedacht wie, ein Methoden Array, das ich dann das Array mit einer Schleife durchlaufe und mir dann die passende Mehtode heraussuche und dementsprechend auch ausführen kann.

Gibt es so was???

Danke für die Antworten!

Mfg Patrick


Th69 - Mi 27.07.11 11:52

Hallo paddy14,


könntest du ein Code-Beispiel geben, was du genau meinst?


paddy14 - Mi 27.07.11 12:10

Code an sich habe ich noch nicht, ich versuche das mal dazustellen.

Die Methoden sind alle unterschiedlich.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if(a == 1)
method1();
if(a == 2)
method2();
if(a == 3)
method3();
.
.
.


Dort wird ja anhand der Nummer entschieden welche Methode aufgerufen wird, wenn ich also bzw. viele verschieden Methoden habe dann wäre es ja blöd immer nur if else Abfragen zumachen, ich habe mir das so vorgestellt.


C#-Quelltext
1:
2:
3:
Methodarray array = new Methodarray[];

array[1](); //Sowas halt, das ich ihm nur noch die Position übergebe und dann die entsprechende Methode ausgeführt wird



Ich hoffe sowas gibt es, wenn nicht wie könnte man es sonst lösen???


Th69 - Mi 27.07.11 12:22

Ja, das ist ganz einfach:
sofern die Methoden alle die gleiche Signatur haben (Rückgabewert sowie Parameter sind identisch), dann erzeuge einfach ein Delegate, z.B.

C#-Quelltext
1:
delegate void MyMethodDelegate(/* evtl. noch Parameter eintragen */);                    

Und dann kannst du ein Array oder List<> oder Dictionary<> oder ... davon anlegen:

C#-Quelltext
1:
MyMethodDelegate myMethods[] = { method1, method2, method3 };                    

Und Aufruf dann per

C#-Quelltext
1:
myMethods[a](/* evtl. hier dann noch die Parameter angeben */);                    

s z.B. auch http://www.dotnetjohn.com/articles.aspx?articleid=262


paddy14 - Mi 27.07.11 12:43

Gilt das auch für Objektmethoden?

Sprich, Objekt1.method(), Objekt2.method()...


Kha - Mi 27.07.11 12:57

Ja, genau so ins Array einfügen.
Eine Frage stellt sich mir dabei aber: Warum hast du überhaupt hunderte verschiedene Methoden mit der gleichen Signatur :shock: ?


paddy14 - Mi 27.07.11 12:59

naja hundert ist ein bissl übertrieben aber es kommen schon so an die 20 zusammen, kommt alles wegen meines Datatransferobjekt, dort sind an die 20 verschiedene Objekte drinn


Ralf Jansen - Mi 27.07.11 13:53

Zitat:
aber es kommen schon so an die 20 zusammen, kommt alles wegen meines Datatransferobjekt, dort sind an die 20 verschiedene Objekte drinn


Wäre es dann nicht sinnvoller (insbesondere einfacher erweiterbar) anstatt 20 verschiedene Methoden lieber 20 Klassen zu machen die ein Interface mit einheitlicher Methodensignatur für diese Methode haben und 1-1 auf deine DTO Typen mappen?