Почему этот, казалось бы, правильный код .NET не компилируется?

Я спрашиваю, если я упускаю что-то очевидное, но я думаю, что, возможно, наткнулся на ошибку в компиляторе .NET.

У меня есть два проекта в .NET-решении: один Visual Basic и один C #.

Код C #, состоящий из трех перегруженных статических методов со значениями по умолчанию:

public static class Class1
{

    public static void TestFunc(int val1, int val2 = 0)
    {
    }

    public static void TestFunc(int val1 = 0)
    {
    }

    public static void TestFunc(string val1, int val2 = 0)
    { 
    }
}

Базовый код Visual, вызывающий один из перегруженных методов:

Option Explicit On
Option Strict On
Imports ClassLibrary1

Module Module1
    Sub Main()
        Dim x As Integer
        Class1.TestFunc(x, 0)
    End Sub
End Module

Компиляция этого кода завершится ошибкой, сообщая:

'TestFunc' неоднозначно, потому что в классе ClassLibrary1.Class1 существует несколько видов членов с таким именем.

Почему он считает этот метод неоднозначным? Существует только один Class1.TestFunc с подписью (int, int). Это ошибка или я что-то упустил?

29
задан w.brian 25 October 2011 в 18:15
поделиться