如何在C#和java中实现这种可插入机制?

如何在C#和java中实现这种可插入机制?,c#,java,c++,externalinterface,loose-coupling,C#,Java,C++,Externalinterface,Loose Coupling,假设我有三个对象A,B,C. B是以下接口的实现: interface D { event EventHandler<OrderEventArgs> OrderCreated; event EventHandler<OrderEventArgs> OrderShipped; } A是宿主类,将调用B的函数来引发指定的事件。 我希望在C中我可以监听接口B或类C,每当B中的事件被触发时,C可以得到通知,然后C可以对事件做出反应 我正在考虑如何在C#和Java

假设我有三个对象A,B,C.
B是以下接口的实现:

interface D
{
    event EventHandler<OrderEventArgs> OrderCreated;
    event EventHandler<OrderEventArgs> OrderShipped;
}
A是宿主类,将调用B的函数来引发指定的事件。 我希望在C中我可以监听接口B或类C,每当B中的事件被触发时,C可以得到通知,然后C可以对事件做出反应

我正在考虑如何在C#和Java中实现这种机制。

任何帮助或提示都将不胜感激

因此您将有一个名为C的EventListener,一个名为A的对象,它有一个类型为B的字段,它是d的实现的一部分

通常,在Java中,您会以不同的方式设计D:

interface D {
   static final String ORDER_PROPERTY="ORDER";
   void setOrder(Order order);
   Order getOrder();
}

class B implements D {
   // delegate object to implement support for event listeners and event firing
   private java.beans.PropertyChangeSupport propertyChangeSupport = new java.beans.PropertyChangeSupport(this);
   private Order order = null; // field that holds current order
   @Override
   public void setOrder(Order order) {
      Order old = this.order;
      this.order = order;
      propertyChangeSupport.firePropertyChange(ORDER_PROPERTY, old, order);
   }
   // more B code here
}

所以你会有一个名为C的EventListener,一个名为A的对象,它有一个类型为B的字段,它是d实现的一部分

通常,在Java中,您会以不同的方式设计D:

interface D {
   static final String ORDER_PROPERTY="ORDER";
   void setOrder(Order order);
   Order getOrder();
}

class B implements D {
   // delegate object to implement support for event listeners and event firing
   private java.beans.PropertyChangeSupport propertyChangeSupport = new java.beans.PropertyChangeSupport(this);
   private Order order = null; // field that holds current order
   @Override
   public void setOrder(Order order) {
      Order old = this.order;
      this.order = order;
      propertyChangeSupport.firePropertyChange(ORDER_PROPERTY, old, order);
   }
   // more B code here
}

实现此模式:

实现此模式:

谢谢,您有C#的解决方案吗?C#中是否存在类似的机制?如果我不使用beans.PropertyChangeSupport,还有其他java解决方案吗?在java中,你可以手动编写事件侦听器通知逻辑(这是PropertyChangeSupport对象的全部功能),但你为什么要这么做呢?这在前面的评论中被忽略了:我猜会有一个C#等价于java.beans对象(我不是一个C#编码器),如果不是的话,实现它是一件微不足道的事情。。。您需要一个方法来添加()和删除()侦听器,以及激发()和事件。谢谢,您有C#中的解决方案吗?C#中是否存在类似的机制?如果我不使用beans.PropertyChangeSupport,还有其他java解决方案吗?在java中,你可以手动编写事件侦听器通知逻辑(这是PropertyChangeSupport对象的全部功能),但你为什么要这么做呢?这在前面的评论中被忽略了:我猜会有一个C#等价于java.beans对象(我不是一个C#编码器),如果不是的话,实现它是一件微不足道的事情。。。您需要一个方法来添加()和删除()侦听器,以及激发()和事件。