我一直在关注这篇文章的指导:
Assigning an IronPython method to a C# delegate
这篇文章还引用了IronPython较暗角落的另一个资源,其中包含一些有用的信息:
http://www.voidspace.org.uk/ironpython/dark-corners.shtml
我试图从C#调用IronPython方法作为委托。我的最新尝试如下(使用System.Action):
IronPython代码:
delegate = Action[String](self.testErrorDelegate);
#csharp library method call
csharp_library.InvokeAction(delegate);
...
@unittest.skip("dev skipping")
def testErrorDelegate(self,message):
print "error delegate"
print message;
csharp库代码:
public void InvokeAction(Action<string> listener)
{
Console.WriteLine("BEFORE INVOKE");
listener("DO SOMETHING");
Console.WriteLine("AFTER INVOKE");
}
我的问题是我在运行它时没有得到python testErrorDelegate的输出。也没有运行时错误。我看到了C#Console.WriteLine语句,但从未打印过“DO SOMETHING”。
对于我在这里做错了什么的任何想法?
我也尝试过从python方法直接转换为C#委托的方法。我使用这种方法看到了相同的行为,即验证C#方法调用,但没有通过委托返回对python代码的调用。
我正在使用IronPython 2.7.1(ipy.exe)。
答案 0 :(得分:1)
看起来这是使用对跳过“unittest”的函数的引用的问题。
我有:
@unittest.skip("dev skipping")
def testErrorDelegate(self,message):
print "error delegate"
print message;
更改为:
def errorDelegate(self,message):
print "error delegate"
print message;
我还改为使用Python代码中的CLR类继承来保持函数注册完全在python代码中完成。
我猜@ unittest.skip注释会对方法的可见性做些奇怪的事情吗?