Ich habe eine Reihe von Funktionen, die ich die folgende Funktionalität haben möchte.
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.
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.
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)
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.
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.
}
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
ansehenBEARBEITEN:
Wenn ich mir die Antworten ansehe, die auftauchten, während ich meine schrieb, ist diese Lösung Brooks sehr ähnlich.
Tags und Links c# reflection function delegates