允许客户端委托覆盖默认行为的模式

Mat*_*ith 2 c# delegates

我有一个C#类,它有一些我希望允许该类客户端覆盖的功能.具体来说,我想要以下内容:

  1. 如果客户端什么都不做,它们会得到我们的默认行为
  2. 客户端可以覆盖该行为并导致调用我们的默认行为.
  3. 客户端可以覆盖该行为并导致我们的默认行为被称为前/后/中间操作.

我目前的想法是:

  1. 如果要覆盖行为,请公开客户端将订阅的事件.
  2. 使用默认行为(与事件的签名匹配)公开方法: void DefaultBehavior()
  3. 每当我们尝试触发事件时,如果委托为null,我们调用默认行为方法,否则,我们调用事件的委托:

    if (eventDelegate == null)
        DefaultBehavior();
    else
        eventDelegate();
    
    Run Code Online (Sandbox Code Playgroud)

当客户端覆盖行为时,他们可以选择调用我们的DefaultBehavior方法来获得所需的行为.

从客户的角度来看,您认为这种方法是否足够直观?或者你能建议任何可能更好的替代方案吗?

zmb*_*mbq 8

好吧,如果你希望你的客户端覆盖某些行为,为什么不创建一个虚拟功能,让客户端实际上override呢?

这是实现这一目标的直接方式.无需重新发明轮子.