我在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会是ambiguos(它可能是上一个列表中的两个第一个方法中的任何一个)。
但是,当尝试从Visual Basic调用MyMethod时,它未在intellisense中列出。如果我手动编写,我收到一个错误:“不明确的电话”。
为什么会这样?
答案 0 :(得分:2)
你需要抛弃选项并坚持重载 - 如果你已经有了没有可选参数的重载,那么选项有点意义:
public MyRetType MyMethod()
{
return MyMethod(null,null);
}
public MyRetType MyMethod(String p1)
{
return MyMethod(p1,null);
}
public MyRetType MyMethod(String p1, IEnumerable<int>)
{
MyMethod(<default values>);
}