Как реализовать интерфейс в VB.Net, когда два метода имеют то же имя, но различные параметры

Я - программист C#, но я должен работать с некоторым кодом VB.Net, и я столкнулся с ситуацией, где у меня есть два метода в интерфейсе с тем же именем, но различными параметрами метода. Когда я пытаюсь реализовать этот интерфейс в классе, VB.Net требует явно объявления "Реализаций MethodName" после сигнатуры метода. Так как оба имен методов идентичны, это путает компилятор. Существует ли способ обойти этот вид проблемы? Я подозреваю, что это должно быть обычным явлением. Какие-либо мысли?

N.B. Это было больше случаем программиста, не проверяющего, что рассматриваемый интерфейс не изменился из-под него.

6
задан Arsalan Ahmed 3 March 2010 в 16:43
поделиться

2 ответа

Как это сбивает компилятор с толку? Компилятор ожидает найти реализацию для каждой сигнатуры метода и различает реализации по их сигнатурам.

Если подписи идентичны / неразличимы (в большинстве случаев это означает, что аргументы одного и того же типа в одном порядке), вы получите ошибку времени разработки, связанную с интерфейсом, говоря, что два метода не могут перегрузить друг друга, поскольку у них одна и та же подпись.

Так что в любом случае не следует путать компилятор. Если вам потребуется дополнительная помощь, приложите образец кода - эти проблемы относительно легко решить.

Совет: при написании реализации, как только вы напишете «реализует MyInterface» и нажмете Enter - Visual Studio создаст «скелетный» код реализации, что избавит вас от написания сигнатур методов и их сопоставления с интерфейсом. .

Пример кода наличия двух методов с одинаковыми именами и всех работоспособных:

Interface MyInterface
    Sub MySub(ByVal arg0 As DateTime)
    Sub MySub(ByVal arg0 As ULong)
End Interface

Class MyImplementation
    Implements MyInterface

    Public Sub MySub(ByVal arg0 As Date) Implements MyInterface.MySub
        ...
    End Sub

    Public Sub MySub(ByVal arg0 As ULong) Implements MyInterface.MySub
        ...
    End Sub
End Class
9
ответ дан 10 December 2019 в 00:37
поделиться

Вы можете сделать метод закрытым и дать ему другое имя.

Типа:

 Private Sub SaveImpl(ByVal someEntity As IEntity) Implements IRepository.Save

снаружи это будет выглядеть так: someRepository.Save

1
ответ дан 10 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: