IronPython方法重载

时间:2012-01-26 19:29:32

标签: .net ironpython

我有一些使用以下构造函数创建Mutex的IronPython代码:

public Mutex(
    bool initiallyOwned,
    string name,
    out bool createdNew
)

由于最后一个参数是一个out参数,你不会将它传递给方法,而是变成一个额外的返回值,如下所示:

mutex, sucess = Mutex(True, 'some_mutex')  

当此代码运行时,它会抛出一个TypeError,表示Mutex对象不可迭代。由于它只返回一个值,这让我相信IronPython没有选择正确的重载。 Ironpython文档说您可以通过对方法对象使用Overloads方法来控制调用的确切重载。

下面的代码尝试了,但是,我得到一个ValueError,指出索引超出了范围:

new_mutex = Mutex.__new__.Overloads[type(True), String, type(True)]
mutex, sucess = new_mutex(Mutex, True, 'some_mutex') 

如果我尝试使用Overloads属性强制使用不同的重载,它会正确执行。谁知道我哪里出错?

1 个答案:

答案 0 :(得分:1)

你可以像这样明确地将out bool传递给构造函数:

success = clr.Reference[bool]()
mutex = Mutex(True, 'some_mutex', success)

# success.Value is your bool result

这让重载解析的东西就可以了。

我不太确定如何从__new__.Overloads中提取正确的方法,但必须有一种方法。如果我只是说Mutex.__new__.Overloads,它会显示一个包含您正在寻找的重载的列表。