C# Как сохранить вызов функции в памяти для последующего вызова

Есть ли в C# способ сохранить вызов функции для последующего вызова? Например, я хочу иметь возможность сказать:

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
    }
}

Позвольте мне дать вам некоторый контекст : я создаю игру в XNA и хочу создать класс DelayedFunctionCaller, на который может ссылаться любой объект для передачи полных вызовов функций, а также время ожидания перед вызовом функции. -ожидание и запуск самого себя, так что это не то место, где я потерялся, я просто не уверен, как или правильно упаковать функцию, которая будет передана в DelayedFunctionCaller.

Вот кикер: DelayedFunctionCaller должен иметь возможность для запуска любой функции, независимо от того, какой объект посылает ей функцию, что функция возвращает или какие параметры она принимает **.У меня уже есть более 100 классов в моей игре, и цель состоит в том, чтобы создать объект, который может сохранить любой вызов функции из любого из них для последующего вызова.

Итак, в результате моего собственного исследования я нашелTypeclassи знаю, что могу сохранить тип вызываемого объекта, имя функции в виде строки (которая является приемлемая жертва), затем используйтеGetMethod()для сохранения метода в MemberInfo, затем используйтеMemberInfo's Invoke()для вызвать функцию даже для сохраненного объекта и с параметрами (в виде массива Objects).

Но все это кажется очень... халтурным. Однажды я попытался посмотреть это и подумал, что общие делегаты— это то, чем я хотел заниматься, но я так запутался в этом, что сдался. Я на правильном пути? Это единственный способ сделать это? Как насчет универсальных делегатов, или я просто сошел с ума, когда думал, что это решит мою проблему?

Любая помощь приветствуется. Спасибо!

10
задан KeithA45 3 June 2012 в 03:02
поделиться