【发布时间】:2012-06-03 03:02:28
【问题描述】:
在 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 多个类,目标是创建一个对象,可以保存其中任何一个的任何函数调用以供以后调用。
所以从我自己的研究中,我找到了Type class,并且我知道我可以将对象调用的类型、函数名保存为字符串(这是可以接受的牺牲),然后使用@987654322 @ 将方法保存在MemberInfo 中,然后使用MemberInfo's Invoke() 调用函数,即使是在保存的对象上,并带有参数(作为Objects 的数组)。
但这一切看起来都非常... hack-ish。我试着查了一下,认为Generic Delegates 是我想走的路,但我在那里迷失了方向,所以我放弃了。我在正确的轨道上吗?这是唯一的方法吗? Generic Delegates 呢,或者当我认为它可以解决我的问题时,我只是疯了?
感谢任何和所有帮助。谢谢!
【问题讨论】:
-
您是否正在寻找类似this 的东西,除了它适用于具有任意数量参数等的任何方法?