Autor Beitrag
paddy14
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Mi 27.07.11 11:17 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 27.07.11 11:52 
Hallo paddy14,


könntest du ein Code-Beispiel geben, was du genau meinst?
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Mi 27.07.11 12:10 
Code an sich habe ich noch nicht, ich versuche das mal dazustellen.

Die Methoden sind alle unterschiedlich.

ausblenden 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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.
ausblenden C#-Quelltext
1:
delegate void MyMethodDelegate(/* evtl. noch Parameter eintragen */);					

Und dann kannst du ein Array oder List<> oder Dictionary<> oder ... davon anlegen:
ausblenden C#-Quelltext
1:
MyMethodDelegate myMethods[] = { method1, method2, method3 };					

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

s z.B. auch www.dotnetjohn.com/a...s.aspx?articleid=262

Für diesen Beitrag haben gedankt: paddy14
paddy14 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: Mi 27.07.11 12:43 
Gilt das auch für Objektmethoden?

Sprich, Objekt1.method(), Objekt2.method()...
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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?