Wiedergabe einer Liste von Funktionen und Parametern

8

Ich habe eine Reihe von Funktionen, die ich die folgende Funktionalität haben möchte.

  • Wenn die Funktion aufgerufen wird, fügen Sie sich selbst zu einer Liste von Funktionen hinzu und merken sich die Parameter und Werte
  • Erlaube, dass die Liste der Funktionen zu einem späteren Zeitpunkt aufgerufen wird

Die verschiedenen Funktionen haben eine Vielzahl von verschiedenen Parametern und ich habe Mühe, über eine elegante Art und Weise zu denken, dies zu tun. Jede Hilfe wäre willkommen.

    
probably at the beach 21.12.2011, 01:42
quelle

5 Antworten

9

Ich denke, das würde Ihre Bedürfnisse erfüllen, aber die Funktionen sind nicht "sich selbst hinzufügen".

%Vor%

Eine Möglichkeit, um die Funktionen "sich selbst hinzufügen" zu machen, wäre die Verwendung einer AOP-Bibliothek wie postsharp oder linfu dynamic proxy und das Hinzufügen eines Interceptors, der dem Array Funktion und Argumente hinzufügt. Dies wäre wahrscheinlich mehr Arbeit, als es IMO wert wäre, da das obige viel einfacher ist und immer noch die gewünschte Funktionalität erreicht.

    
Brook 21.12.2011, 02:37
quelle
5

Es gibt kaum eine elegante Lösung dafür. Da Sie angegeben haben, dass die Methoden alle unterschiedliche Signaturen haben, gibt es keine Möglichkeit, sie in einem einzigen Array als Delegaten zu speichern . Danach können Sie versuchen, reflection zu verwenden, indem Sie jeden Parameterwert in object [] speichern, die Methode als MethodInfo speichern und dann aufrufen.

Edit: Das könnte ich mir vorstellen:

%Vor%

Dann rufen Sie einfach mit method.Invoke(method.ReflectedType, args)

auf     
Tomislav Markovski 21.12.2011 02:26
quelle
3

Vielleicht könntest du die Funktion Delegate.DynamicInvoke(Object[] obj) nutzen. Sie können jede Methode zu einem Objekt-Array hinzufügen und dann das Array durchlaufen, das DynamicInvoke aufruft.

    
Shimmy Hacked 21.12.2011 02:14
quelle
1

Ich bin mir nicht sicher, ob ich Ihre Frage verstehe, aber ich denke, Sie könnten ein Array von Zeigern zu einer Funktion verwenden (in C # heißt es Delegaten). Wenn die Funktion aufgerufen wird, fügen Sie den Funktionszeiger in eine Liste ein. Auf diese Weise können Sie die Funktion aus der Liste aufrufen. Hier ist eine Idee. Beachten Sie, wenn Sie einen neuen Delegiertenzeiger zu einer Liste hinzufügen ( functionPointers ), fügen Sie in der zweiten Liste myParameters ein neues Objekt vom Typ Parameters hinzu, das Funktionsparameter im öffentlichen Attribut parameters enthält. Dies bedeutet, dass der Delegat i in der Liste functionPointers für Parameter i -tes Objekt in der Liste myParameters hat. So wissen Sie, welche Parameter für welche Funktion sind. Wahrscheinlich gibt es bessere Lösungen, aber das ist eine Alternative.

%Vor%

}

    
MrD 21.12.2011 02:00
quelle
1

Sie könnten eine Liste von Aktionen oder Funktionen verwenden

%Vor%

Wenn Sie auch Parameter speichern möchten, können Sie einen Func verwenden und ihn auf ähnliche Weise speichern und verwenden

Sie können sich auch Aufgaben

ansehen

BEARBEITEN:

Wenn ich mir die Antworten ansehe, die auftauchten, während ich meine schrieb, ist diese Lösung Brooks sehr ähnlich.

    
Peter 21.12.2011 02:46
quelle

Tags und Links