【问题标题】:How to implement this pluggable mechanism in C# and java?如何在 C# 和 java 中实现这种可插拔机制?
【发布时间】:2010-09-10 00:40:51
【问题描述】:

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

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

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

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

A 是宿主类,它将调用 B 的函数来引发指定的事件。 我希望在 C 中我可以监听接口 B 或 C 类,每当 B 中的事件发生时,C 可以得到通知,然后 C 可以对事件做出反应。

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

【问题讨论】:

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


    【解决方案1】:

    所以你会有一个名为 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# 编码器),如果不是它是一件微不足道的事情实现......你需要一个方法来添加()和删除()监听器以及触发()和事件。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 2019-06-20
      相关资源
      最近更新 更多