Я - программист C#, но я должен работать с некоторым кодом VB.Net, и я столкнулся с ситуацией, где у меня есть два метода в интерфейсе с тем же именем, но различными параметрами метода. Когда я пытаюсь реализовать этот интерфейс в классе, VB.Net требует явно объявления "Реализаций MethodName" после сигнатуры метода. Так как оба имен методов идентичны, это путает компилятор. Существует ли способ обойти этот вид проблемы? Я подозреваю, что это должно быть обычным явлением. Какие-либо мысли?
N.B. Это было больше случаем программиста, не проверяющего, что рассматриваемый интерфейс не изменился из-под него.
Как это сбивает компилятор с толку? Компилятор ожидает найти реализацию для каждой сигнатуры метода и различает реализации по их сигнатурам.
Если подписи идентичны / неразличимы (в большинстве случаев это означает, что аргументы одного и того же типа в одном порядке), вы получите ошибку времени разработки, связанную с интерфейсом, говоря, что два метода не могут перегрузить друг друга, поскольку у них одна и та же подпись.
Так что в любом случае не следует путать компилятор. Если вам потребуется дополнительная помощь, приложите образец кода - эти проблемы относительно легко решить.
Совет: при написании реализации, как только вы напишете «реализует 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
Вы можете сделать метод закрытым и дать ему другое имя.
Типа:
Private Sub SaveImpl(ByVal someEntity As IEntity) Implements IRepository.Save
снаружи это будет выглядеть так: someRepository.Save