Laden...

Methode dynamisch aufrufen?

Erstellt von mirzahat vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.196 Views
M
mirzahat Themenstarter:in
102 Beiträge seit 2007
vor 16 Jahren
Methode dynamisch aufrufen?

Hallo,
ist in C# so was moeglich (wie z.B. in PHP):

string nameDerMethode = "soEineMethode";

nameDerMethode();

Oder uber Umwege?

Gruss,
Mirza

830 Beiträge seit 2005
vor 16 Jahren

Über Umwege geht das mit Reflection.
Wozu brauchst du das?

Gruss
Friedel

Ohne Ziel ist auch der Weg egal.

M
mirzahat Themenstarter:in
102 Beiträge seit 2007
vor 16 Jahren

Danke fuer die Antwort erstmal 🙂

ich habe eine Flash + C# Kommikation, da sendet flash xml zu C#, dann parse ich den Namen der Methode und bekomme den String z.B. "methode", dann waere es nett wenn ich statt vieler switch cases einfach:

"methode"();

schreiben keonnte.

Gruss,
Mirza

O
778 Beiträge seit 2007
vor 16 Jahren

wenn du weisst von welcher Klasse das eine statische Methode ist, bzw, auf welches Objekt du diuese Methode anwenden sollst, dann geht das.

830 Beiträge seit 2005
vor 16 Jahren

Berechtigter Weise sollte man mit Refelction vorsichtig sein, aber dort wo sie sinnvoll eingesetzt werden kann, ist sie eine große Hilfe 🙂


Type typWelcherDieMethodeEnthält = typeof(DeinTyp);
MethodInfo mInfo = typWelcherDieMethodeEnthält.GetMethod("NameDerMethode");
object rückgabewertDerMethode = mInfo.Invoke(instanzDesTypsWelcherDieMethodeEnthält, new object[]{ param1, param2 });

Es fehlen evtl. noch die BindingFlags, wenn du an eine private Methode ran willst. Sh. :rtfm:

Gruss
Friedel

Ohne Ziel ist auch der Weg egal.

M
mirzahat Themenstarter:in
102 Beiträge seit 2007
vor 16 Jahren

oh, sieht doch komplexer aus als die switch methode... 🙂 Immerhin danke

gruss,
mirza

O
778 Beiträge seit 2007
vor 16 Jahren

sieht komplexer aus (ist es auch 🙂), aber ist auch deutlich leistungsfähiger, da du fuer die Implementierung einer neuen Methode die Methode nur erstellen musst und nicht dauernd was in der Switch-Anweisung machen...

S
8.746 Beiträge seit 2005
vor 16 Jahren

Original von onlinegurke
aber ist auch deutlich leistungsfähiger

Das stimmt zwar, aber letztlich geht es ja hier wieder mal nur um "wie kann ich meine Programmiermodelle aus dem Scripting-Bereich auf .NET anwenden". Die Frage ist doch praktisch synonym zu "dynamische Variablennamen", auch wenn es hier Methoden adressiert.

In diesem Fall sollte man dann doch lieber sagen, dass die 1:1-Übertragung des Konzeptes ein Fehler ist.

Wie wärs z.B. mit einer Hashtable<string,Mydelegate> ?

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo svenson,

ich glaube wenn ich das richtig verstanden hab ist es keine Portierung, sondern eine Schnittstelle, die von Flash zu C# bedient wird.

Und genau da würde ich auch ein Einstzgebiet für Reflection sehen.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

F
10.010 Beiträge seit 2004
vor 16 Jahren

Nö, wenn du einmal das von svenson genannte eingesetzt hast, ist es simple
zu erweitern, und kommt gänzlich ohne reflection aus.

0
767 Beiträge seit 2005
vor 16 Jahren

svensons lösung ist gut.

aber unter umständen kommst du mit dem Strategy Pattern noch weiter. Dazu wirst du aber dein Programm zumindest leicht ändern müssen und nicht mehr den Namen einer Methode übergeben, sondern je nach Methode eine Instanz einer anderen Klasse, die ein Interface implementiert.

loop:
btst #6,$bfe001
bne.s loop
rts

S
8.746 Beiträge seit 2005
vor 16 Jahren

Naja, bei XML sind die Parameter dynamisch, da kommt man mit delegaten nur bedingt weiter. Insofern wäre hier Reflection vielleicht doch angezeigt.