2014-01-24 6 views
4

Я беру веб-сервис, написанный на VB и переписывающий его на C#. Класс сервиса реализует два интерфейса, каждый из которых имеет по четыре метода. Три из четырех методов имеют одно и то же имя метода подписи и список параметров. 4-й метод имеет то же имя, но другой список параметров.C# эквивалент реализации интерфейса VB.NET

В VB вы явно определяете методы интерфейса, связанные с методами класса публичного обслуживания. Таким образом, для методов, которые являются такими же, реализация выглядит следующим образом:

class WebServiceClass 
{ 
    Public Function Method1(result as Int32) As String Implements Interface1.Method1, Interface2.Method1 

    Public Sub Method2(Id as Int64, P3 as Int32) Implements Interface1.Method2 

    Public Sub Method3(In as Int64) Implements Interface2.Method2 
} 

Вы можете сделать это в C#?

Я знаю, что вы можете явно определять методы в классе веб-службы с интерфейсом. Method2 (Id как Int64, ...) и Interface2.Method2 (In as ...). Но это будет означать изменение имен этих методов, и поэтому любое приложение, использующее эти методы, должно быть обновлено.

Я также могу изменить имена методов интерфейса в соответствии с методами веб-службы, но любое приложение, использующее эти интерфейсы, должно быть изменено.

Есть ли кто-либо, чтобы явно идентифицировать метод интерфейса в классе веб-службы, но сохраняя методы класса веб-службы одинаковыми именами и подписями как оригинал?

ответ

7

К сожалению, просто нет прямого эквивалента этой функции VB.NET в C#. В C# нет способа реализовать метод интерфейса и присвоить ему другое имя. Это можно моделировать, просто создав нужное имя и получив реализацию интерфейса до этого имени метода.

class WebServiceClass : Interface1, Interface2 
{ 
    public string Method1(int result) { ... } 
    public void Method2(long id, int p3) { ... } 
    public void Method3(long in) { ... } 

    string Interface1.Method1(int result) { return Method1(result); } 
    void Interface1.Method2(long id, int p3) { Method2(id, p3); } 
    string Interface2.Method1(int result) { return Method1(result); } 
    void Interface2.Method2(long in) { Method3(in); } 
} 
+0

Это отличный образец; явные реализации интерфейса, которые содержат значительное количество кода, часто являются анти-шаблонами в наследуемых классах, поскольку производные классы не могут их обернуть. Наличие явной реализации интерфейса просто соединяется с защищенным виртуальным методом делает вещи намного чище. – supercat

+0

Не следует ли использовать метод1, метод2 и метод3? –

+0

@GloriaSantin зависит от вашей ситуации и хотите ли вы, чтобы они были доступны другим экземплярам – JaredPar

Смежные вопросы