我有一个层次结构。
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建议使用CreateInboundMessage
和CreateOutboundMessage
这两种工厂方法可能更有意义,因为两种消息的行为不同。然后,这些方法将返回IIncomingMessage
和'IOutgoingMessage`实例,然后您可以对其进行处理或相应地进行处理。IMessage
当前用作标记界面。如果您认为有此需要-是否是泛型的约束(例如MyCollection<T> where T : IMessage
),请保留该类。但是,如果它实际上不是在描述行为或一组通用的属性/方法,或者不用作有用的标记,那么我不确定它会带来什么好处。
同样,这是基于只看一点点代码。我假设幕后还有更多的行为和功能。祝好运!!
关于c# - 接口(interface)继承接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23785831/