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