拦截方法调用c#对象

时间:2013-10-16 07:24:01

标签: c# ironpython dynamic-language-runtime

我有一个混合c#对象,有一些实例属性和方法,我将它传递给IronPython。我想要的是从Py代码将调度同步到c#成员,包括静态和动态。

我在c#对象上实现了IDynamicMetaObjectProvider,我注意到当Py调用我的对象的静态方法,并且使用在编译时与动态定义的实例方法时,从不使用方法BindInvokeMember,但总是调用它方法BindGetMember。

我有点困惑,可能这件事无法完成?

2 个答案:

答案 0 :(得分:0)

IronPython将始终使用BindGetMember,然后调用结果,因为这就是Python的工作方式 - 从对象获取属性,然后调用它。您的BindGetMember实现应该返回另一个实现BindInvokeMember的动态对象,它将具有您需要的参数。

答案 1 :(得分:0)

我也被困了一段时间。 解决方案是实现BindGetMember并返回一个meta对象,它将表达Point指向一个函数。此函数必须返回一个委托,然后使用参数调用该委托。所以BindInvokeMember根本就没用过。这对我有用。我的代码如下所示:

select { width: 100px; }