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

标签 c# java c++ externalinterface loose-coupling

假设我有三个对象 A、B、C。
B是以下接口(interface)的实现:

interface D
{
    event EventHandler<OrderEventArgs> OrderCreated;
    event EventHandler<OrderEventArgs> OrderShipped;
}

我会在 B 中添加两个函数,它们会引发界面中的事件。

class B
{
  RaiseOrderCreated();
  RaiseOrderShipped();
}

A 是托管类,将调用 B 的函数来引发指定的事件。 我希望在C中我可以监听接口(interface)B或类C,每当B中的事件被引发时,C可以得到通知,然后C可以对事件使用react。

我在思考如何在C#和Java中实现这个机制。
任何帮助或提示将不胜感激!

最佳答案

所以你有一个名为 C 的 EventListener,一个名为 A 的对象,它有一个 B 类型的字段,它是 D 的某个实现的 child 。

通常在 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#和java中实现这种可插拔机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681574/

相关文章:

java - 如何将两个数组之间的交集作为新数组?

c# - 将事件转换为任务的可重用模式

c# - 在 Azure 中添加、编辑元数据

Java ByteArray 文件解析

java - 在 Neo4J 中,如何在 Java 的密码查询中将标签设置为参数?

java - 相当于 Java 中的 Ruby #map 或 #collect 吗?

c++ - 接受所有成员函数指针的模板(包括 CV 限定和 ref 限定)

c# - 用二进制表示子集

c# - 如何在 C# 中编写文件系统观察程序?

c++ - C++ 二进制文件读取性能