C# Wie Sie eine Funktion aufrufen, für die im Speicher für eine spätere aufrufen

Gibt es eine Möglichkeit in C# speichern Sie eine Funktion aufrufen, für die Sie später aufrufen? Zum Beispiel, ich möchte in der Lage sein zu sagen:

public class MyFunctionCaller
{
    public static void SaveFunctionCallForLater(/* Some parameters*/)
    {
    //Save the Function Call in a variable or a list to be invoked after a set amount of time
   }
}

public class MyProgram
{
    public static void Main()
    {
        //Save a call to 'SpecialFunction' along with its parameters,
        //and maybe the object that's calling it (not applicable in
       //this example context, but important to my question)
        MyFunctionCaller.SaveFunctionCallForLater(/* Stuff */);
    }

    public void SpecialFunction(/* Stuff */)
    {
        //Does some cool stuff
    }
}

Lassen Sie mich Ihnen etwas Kontext: ich erstelle ein Spiel in XNA, und ich möchte eine DelayedFunctionCaller Klasse, dass sich jedes Objekt verweisen können, um von hand vervollständigen-Funktion Aufrufe, zusammen mit einer Menge an Zeit zu warten, bevor er die Funktion aufruft. Ich handle die ganze Zeit warte-und Triggerung mich so das ist nicht, wo ich bin verloren, ich bin nur nicht sicher, wie oder die richtige Art und Weise zu Verpacken, die der Funktion übergeben werden, die DelayedFunctionCaller.

Hier ist der Clou: der DelayedFunctionCaller hat in der Lage zu sein, jede Funktion, egal, welches Objekt sendet es eine Funktion, welche die Funktion zurückgibt, oder welche Parameter es braucht**. Ich habe über 100 Klassen in meinem Spiel bereits, und das Ziel ist, erstellen Sie ein Objekt speichern kann eine beliebige Funktion rufen Sie aus einem von Ihnen für eine spätere Berufung.

Also aus meiner eigenen Forschung, die ich gefunden habe, die Type Klasse, und ich weiß, dass ich sparen kann der Typ des Objekts aufrufen, den Namen der Funktion als string (was ist ein annehmbares Opfer), dann verwenden Sie GetMethod() zu speichern, die Methode in einem MemberInfo, dann verwenden Sie MemberInfo's Invoke(), um die Funktion aufzurufen, auch auf ein gespeichertes Objekt, und mit den Parametern (als ein array von Objects).

Aber das scheint alles sehr... hack-ish. Ich versuchte das einmal und dachte, dass Generische Delegaten war der Weg, den ich gehen wollte, aber ich habe so verloren, dass ich es aufgab. Bin ich auf dem richtigen Weg? Ist dies der einzige Weg, dies zu tun? Was ist Generische Delegaten, oder war ich einfach nur aus meinem Kopf, wenn ich dachte, es würde mein problem lösen?

Jegliche Hilfe sehr geschätzt wird. Danke!

  • Sind Sie auf der Suche nach so etwas wie dieser, außer, dass es für jede Methode mit einer beliebigen Anzahl von Parametern, etc?
InformationsquelleAutor KeithA45 | 2012-06-03
Schreibe einen Kommentar