В C# возможно ли реализовать элемент интерфейса, используя элемент с другим именем, как вы можете сделать в VB.NET?
Хорошо, это вопрос, который я задаю, не для демонстрации хорошей практики кодирования (это на самом деле можно считать плохой практикой), а скорее для того, чтобы "можно" это сделать вообще.
Тем не менее, в VB.NET вы реализуете такой интерфейс...
Sub SomeInterfaceMember()
Implements ISomeInterface.SomeInterfaceMember
End Sub
в то время как в C# вы делаете это явно так (что может быть вызвано только через интерфейс)...
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
Другими словами, метод, который обрабатывает реализацию, может иметь совершенно другое имя, чем имя члена интерфейса.
Мне просто интересно, есть ли что-то подобное в C#. (Да, я знаю, что могу просто сделать явный интерфейс, а затем получить к нему доступ через другой элемент-обертку с другим именем, которое просто делегирует ему, но в VB.NET вы делаете оба с помощью одного метода.)
Так можно ли это сделать?
отметка
2 ответа
Нет, это не возможно в C#. (Вы не можете "явно реализовать интерфейс" в VB.NET.)
Это "можно" сделать в том смысле, что вы можете достичь результата, который в принципе неотличим от сценария VB, используя явную реализацию + открытый метод, который вызывает эту реализацию.
Помимо случаев, связанных с рефлексией, это действительно в конечном итоге будет то же самое.