对派生类型执行常见操作

时间:2010-01-26 23:35:14

标签: c#

是否有一种简洁的方法可以创建多个类(也就是说从1个接口派生),每个类都执行相同的操作?想想ASP.NET中为每个请求提供服务的http模块(每个关键字) - 有没有办法对派生类型执行一些常见操作?反思可能是一种方式,但我会对基类级别的方式感兴趣。

由于

6 个答案:

答案 0 :(得分:3)

不只有一个界面;你想要一个抽象类在中间:

abstract class Whatever : IFooable {
    public virtual void Do () {
        PreDo();
    }

    protected abstract void PreDo();
}

然后拨打Do,并在所有实施类型上自动调用PreDo

(编辑:为了清楚起见,我将Do设为虚拟,这意味着如果你重新实现它,你应该首先调用base.Do(),只是为了确保它实际调用父代法)。

答案 1 :(得分:0)

如果你的类都来自一个公共基类,你可以将这个逻辑放在你的公共基类中。

答案 2 :(得分:0)

如果我理解你的要求是正确的,那么可能还有一个事件处理程序?

如果您需要一堆对象来响应某些操作,那么事件(也称为“消息传递”)就是您的选择。

这样的东西?

class Foo
{
     public event EventHandler PerformAction;

     private void OnActionNeeded()
     {
          // A bunch of Bars need to do something important now.

          if (PerformAction != null)
                 PerformAction.Invoke();
     }

}

class Bar
{
   public Bar(Foo fooToWatch)
   {
         fooToWatch.PerformAction += new EventHandler(Foo_PerformAction);
   }

   void Foo_PerformAction(object sender, EventArgs e)
   {
        // Do that voodoo that you do here.
   }
}

答案 3 :(得分:0)

可能不是一个完整的答案,但我很想从AOP和属性的角度思考。

一些参考文献:

http://www.codeproject.com/KB/cs/ps-custom-attributes-1.aspx

http://www.postsharp.org/contributions/documentation/removing-duplicate-code-in-functions

答案 4 :(得分:0)

模板方法设计模式可能适用于您所要求的内容。

http://www.dofactory.com/Patterns/PatternTemplate.aspx

答案 5 :(得分:0)

设计接口的总体目标是在两个组件之间提供协议并隐藏实现部分。 接口用作通信介质。 而你所要求的似乎是具体的实施。 哪个可以使用实用程序类干净地处理(单例与方法) 我不建议在当前场景中使用抽象类。