我有一个层次结构。

public interface IIncomingMessage : IMessage
{
    String Source { get; set; }
    void ProcessMessage();
}


public interface IOutgoingMessages : IMessage
{
    void SendMessage();
}


我有一个使用静态CreateMessage方法生成消息的客户端。

IMessage message = MessageFactory.CreateMessage("incomingA");
messageA.ProcessMessage();


但是,执行此操作的唯一方法是将ProcessMessage()添加到IMessage。但是,如果执行此操作,则必须在IOutgoingMessage中实现此功能。

现在,当我写这篇文章时,我发现我可以摆脱IMessage了。还是有更好的方法呢?

最佳答案

根据您使用CreateMessage工厂的方式,您期望ProcessMessage是所有IMessage类型的通用方法。根据您期望代码如何工作,我想说IMessage应该定义一个ProcessMessage方法接口。

但是,在看一小段代码时,在我看来,您的意图不是总是处理一条消息,而是仅在它是IIncomingMessage实现时才这样做。因此,您的工厂方法行不通。 T. Kiley建议使用CreateInboundMessageCreateOutboundMessage这两种工厂方法可能更有意义,因为两种消息的行为不同。然后,这些方法将返回IIncomingMessage和'IOutgoingMessage`实例,然后您可以对其进行处理或相应地进行处理。

IMessage当前用作标记界面。如果您认为有此需要-是否是泛型的约束(例如MyCollection<T> where T : IMessage),请保留该类。但是,如果它实际上不是在描述行为或一组通用的属性/方法,或者不用作有用的标记,那么我不确定它会带来什么好处。

同样,这是基于只看一点点代码。我假设幕后还有更多的行为和功能。祝好运!!

关于c# - 接口(interface)继承接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23785831/

10-12 15:37