В конечном итоге все сводится к тому, как C # реализует необязательные параметры в вашем первом статическом методе. Если вы удалите значение по умолчанию для этого, ваше решение должно скомпилироваться.
public static void TestFunc(int val1, int val2)
{
}
На самом деле, в этом случае я несколько удивлен, что C # компилируется. Вы должны использовать необязательные параметры в C # или перегрузки, но не оба. Например, как бы вы недвусмысленно сказали следующее:
public static void TestFunc(int val1, int val2 = 0)
{
}
public static void TestFunc(int val1)
{
}
Если я укажу следующее, какой из двух методов должен быть выполнен - один с необязательным параметром или второй без второго параметра?
TestFunc(1)
Лучшее решение, если вы хотите включить необязательные параметры в реализацию C #, - объединить первый и второй методы и при необходимости проверить значение по умолчанию:
public static void TestFunc(int val1, int val2 = 0)
{
}
public static void TestFunc(string val1, int val2 = 0)
{
}
Обратите внимание, что с помощью этой версии VB IS может определить, какой метод вызывать.