1

我正在尝试设置 C# 代码以自动为 IronPython 脚本调用的方法创建虚拟或后备委托,但尚未明确实现。

假设有一个脚本调用了非静态 C# 类方法“MoveTo”,该方法尚未在相应的类中实现。通常,如果它存在,则通过创建相应的委托实例将其添加到脚本的范围,该委托实例通过调用具有方法名称和委托实例的“SetVariable”赋予范围。这适用于已经实现的方法。

如果该方法尚未实现,则调用不会失败,而是被重定向到一个虚拟方法,该方法可以优雅地处理调用并假装成功执行(在我的特定情况下被认为是不重要的)。

问题是:IronPython 脚本调用的方法具有广泛的签名(实际上它们可以具有任何可能的签名)。因此,我想动态创建一个后备委托,它获得被调用方法的相同签名,因此“捕获”对尚未实现的方法的每次调用。

你们对我如何实现这个目标有任何想法吗?

4

1 回答 1

0

您应该能够创建一个采用任意数量/类型的参数的包罗万象的方法:

object Fallback([ParamDictionary]IDictionary<object, object> kwargs, params object[] args) {
  return null; // or whatever
}

(可悲的是,这与编写类似函数的普通 Python 方式相反:def foo(*args, **kwargs):。)

如果您不使用关键字 args,则可以删除它并使用params

object Fallback(params object[] args) {
  return null; // or whatever
}

然后使用.SetVariable("whatever", Fallback)使其成为后备方法。

于 2013-04-10T19:55:01.640 回答