私は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)
{
...
}
新しいオプションのパラメーターを追加する必要がありました。下位互換性を維持するために、それぞれ 1 つのパラメーターを持ついくつかのメソッドを追加し、以前のメソッドを書き直して新しいメソッドを呼び出しました。
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 を呼び出すとあいまいになることは承知しています (最後のリストの最初の 2 つのメソッドのいずれかである可能性があります)。
ただし、Visual Basic から MyMethod を呼び出そうとすると、IntelliSense にリストされません。手動で書くと、「あいまいな呼び出し」というエラーが発生しました。
なぜこれが起こるのですか?