在运行时动态创建回退委托



我正在尝试设置c#代码来自动为IronPython脚本调用的方法创建虚拟或回退委托,这些方法尚未显式实现。

假设有一个脚本调用非静态c#类方法"MoveTo",该方法尚未在相应的类中实现。通常,如果它存在,则通过创建相应的委托实例将其添加到脚本的作用域中,该委托实例通过调用"SetVariable"(带有方法和委托实例的名称)提供给该作用域。

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

问题是:IronPython脚本调用的方法有各种各样的签名(实际上它们可以有任何可能的签名)。因此,我想动态地创建一个回退委托,它获得与被调用方法相同的签名,从而"捕获"对尚未实现的方法的每个调用。

你们知道我怎样才能达到这个目标吗?

您应该能够创建一个接受任意数量/类型的参数的捕获所有方法:

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)使其成为回退方法

相关内容

  • 没有找到相关文章

最新更新