将IronPython方法分配给C#委托
我有一个C#类,看起来有点像:将IronPython方法分配给C#委托,c#,delegates,ironpython,variable-assignment,C#,Delegates,Ironpython,Variable Assignment,我有一个C#类,看起来有点像: public class MyClass { private Func<IDataCource, object> processMethod = (ds) => { //default method for
public class MyClass
{
private Func<IDataCource, object> processMethod = (ds) =>
{
//default method for the class
}
public Func<IDataCource, object> ProcessMethod
{
get{ return processMethod; }
set{ processMethod = value; }
}
/* Other details elided */
}
但是当调用ProcessMethod
时(在IronPython之外),在这个赋值之后,默认方法将运行
我知道脚本是运行的,因为脚本的其他部分工作正常
我应该怎么做呢?我在谷歌上进一步搜索了一下,发现了一个关于IronPython黑暗角落的页面: 我应该做的是:
from MyApp import myObj #instance of MyClass
import clr
clr.AddReference('System.Core')
from System import Func
def OtherMethod(ds):
if ds.Data.Length > 0 :
quot = sum(ds.Data.Real)/sum(ds.Data.Imag)
return quot
return 0.0
myObj.ProcessMethod = Func[IDataSource, object](OtherMethod)
回复一篇旧文章,但你不需要从某处导入名称IDataSource才能工作吗?是的,如果你能稍微解释一下上面的代码,特别是最后一行,那就太好了。@not2qubit最后一行是分配保存函数
OtherMethod
的Func
,在上面的python中定义的属性ProcessMethod
,该属性在问题中定义。我想,重要的几行是两个额外的导入,以及对clr.AddReference
的调用,它们允许我使用Func
from MyApp import myObj #instance of MyClass
import clr
clr.AddReference('System.Core')
from System import Func
def OtherMethod(ds):
if ds.Data.Length > 0 :
quot = sum(ds.Data.Real)/sum(ds.Data.Imag)
return quot
return 0.0
myObj.ProcessMethod = Func[IDataSource, object](OtherMethod)