c# - 接口(interface)继承接口(interface)

标签 c# inheritance

我有一个层次结构。

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 建议有两个工厂方法 CreateInboundMessageCreateOutboundMessage可能更有意义,因为您对两种类型的消息有不同的行为。然后这些方法将返回 IIncomingMessage和 'IOutgoingMessage` 实例,然后您可以处理它们或相应地处理它们。

IMessage目前,被用作标记界面。如果您认为需要这样做——无论它是对泛型的约束(例如 MyCollection<T> where T : IMessage ),然后保留它。但如果它真的没有描述行为或一组通用的属性/方法,或者如果它不被用作有用的标记,那么我不确定它提供了什么好处。

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

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

相关文章:

c# - 执行 Action 并返回相同枚举的 .Net Enumerable 扩展

java - 如何访问 list< 的实际运行时对象上的方法?扩展基类>?

C# SNMP 编程

c# - 后台工作人员 : InvalidOperationException in RunWorkerCompleted

c# - 使用 XAML 属性在 RichTextBox 中插入图像

c++ - 这个 C++ 标识符是如何未定义的?

c++ - 扩展模板抽象类时出错

hibernate - JPA:是否可以更改继承层次结构中的 PK?

c++ - 在 C++ 中声明 "interface"并且不将其 vtable 发送到每个翻译单元

c# - Nhibernate 尝试在保存时添加重复列