Подтвердить что ты не робот

В С# можно ли реализовать элемент интерфейса, используя член с другим именем, как вы можете сделать в VB.NET?

Хорошо, это вопрос, который я задаю, не так, как в демонстрации хороших методов кодирования (это на самом деле можно считать плохой практикой), а скорее в отношении "может" это вообще делается.

Тем не менее, в VB.NET вы реализуете такой интерфейс...

Sub SomeInterfaceMember()
    Implements ISomeInterface.SomeInterfaceMember
End Sub

в то время как в С# вы явно это делаете (который может быть вызван только через интерфейс)...

void ISomeInterface.SomeInterfaceMember(){}

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

void SomeInterfaceMember(){} // <-- This name matches the interface member

Однако, что касается VB, вы также можете сделать это, используя любое имя, которое вы хотите для члена...

Sub SomeRandomMemberName() // <-- This name doesn't match the interface member
    Implements ISomeInterface.SomeInterfaceMember
End Sub

Другими словами, метод, который обрабатывает реализацию, может иметь совершенно другое имя, чем имя члена интерфейса.

Мне просто интересно, есть ли что-то подобное в С#. (Да, я знаю, что могу просто сделать явный интерфейс, а затем получить доступ к нему через другого члена "обертки" с другим именем, которое просто делегирует ему, но в VB.NET вы делаете оба с помощью одного метода.)

Так что это можно сделать?

Марк

4b9b3361

Ответ 1

Нет, это невозможно в С#. (Вы не можете "явно реализовать интерфейс" в VB.NET либо.)

Ответ 2

Это "может" быть сделано в том смысле, что вы можете достичь результата, который в принципе не отличим от сценария VB, используя явную реализацию + общедоступный метод, который вызывает эту реализацию.

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