C# 关于WCF中的继承

C# 关于WCF中的继承,c#,wcf,inheritance,C#,Wcf,Inheritance,我有这样一个WCF构造函数: [ServiceContract] public interface IService { [OperationContract] methodA..... [OperationContract] methodB.... [OperationContract] methodC.... } 我还有一个类继承了上面的接口,如下所示 public class A: IService { meth

我有这样一个WCF构造函数:

[ServiceContract]
public interface IService
{
    [OperationContract]
    methodA.....

    [OperationContract]
    methodB....

    [OperationContract]
    methodC....
}
我还有一个类继承了上面的接口,如下所示

public class A: IService
    {
        methodA(){}
        methodB(){}
        methodC(){}
    }
有一个iphone应用程序调用class a与服务器进行通信 将有另一个新的iphone应用程序,它将调用B类与服务器通信

现在我必须创建类B,它几乎与类A相同。 但是在B类中,methodB中只有一些修改,不需要methodC

我被要求重用类A,并考虑使用inherance而不是编写重复的代码


我不知道如何利用这种天赋来做这项工作。有人能帮我吗?谢谢大家!

您的确切要求不清楚。你没有解释你能改变什么,不能改变什么。如果您想要更具体的答案,您需要添加额外的约束。我将展示首选的方法

使用此继承结构:

public class ServiceBase
{
    public Foo MethodA()
    {
        // Shared implementation
    }

    public abstract Foo MethodB();
}

public class ServiceA : ServiceBase
{
    public override Foo MethodB()
    {
        // ServiceA-specific implementation
    }

    public Foo MethodC()
    {
        // Only in ServiceA
    }
}

public class ServiceB : ServiceBase
{
    public override Foo MethodB()
    {
        // ServiceA-specific implementation
    }
}

这样,两个服务都继承MethodA的实现,而两个服务都有自己的MethodB实现。MethodC只是必需的,因此只存在于ServiceA中。

如果使用两个单独的服务类,则必须有两个单独的WCF服务。使用第二个接口,而不是第二个类。然后,您可以在一个服务上有两个端点,服务于两个不同的应用程序:

[ServiceContract]
public interface IService
{
    [OperationContract]
    methodA.....

    [OperationContract]
    methodB....

    [OperationContract]
    methodC....
}

[ServiceContract]   // this is for the second app
public interface IService2
{
    [OperationContract]
    methodA.....

    [OperationContract]
    methodB2....   // a different method
}


public class A: IService, IService2
{
    methodA(){}   // used by app 1 and app 2
    methodB(){}   // used by app 1
    methodB2(){}  // used by app 2
    methodC(){}   // used by app 1
}
在类A中标记MethodB virtual并在类B中重写它。。您不能删除方法,但如果该方法用于MethodC,则可以引发异常