我在 c# 中有一个具有以下方法的类:
public MyRetType MyMethod(String p1 = null)
{
MyMethod(<default values>);
}
public MyRetType MyMethod(String p1, String p2, MyClass1 p3, String p4 = null, MyClass2 p5 = null)
{
...
}
我不得不添加一个新的可选参数。为了保持向后兼容性,我添加了几个方法,每个方法多了一个参数,并且我重写了以前的方法来调用新的方法:
public MyRetType MyMethod(String p1 = null, IEnumerable<int> pnew = null)
{
MyMethod(<default values>);
}
public MyRetType MyMethod(String p1)
{
return MyMethod(p1, null);
}
public MyRetType Launch(String p1, String p2, MyClass1 p3, IEnumerable<int> pnew , String p4 = null, MyClass2 p5 = null)
{
...
}
public MyRetType MyMethod(String p1, String p2, MyClass1 p3, String p4= null, MyClass2 p5 = null)
{
return MyMethod(p1, p2, p3, null, p4, p5);
}
这似乎在 c# 中有效,尽管我知道仅使用 null 调用 MyMethod 将是模棱两可的(它可能是最后一个清单中的两个第一个方法中的任何一个)。
但是,当尝试从 Visual Basic 调用 MyMethod 时,它不会在智能感知中列出。如果我手动编写它,我会收到一个错误:“Ambiguous call”。
为什么会这样?