在派生类型上执行常见操作

4
有没有一种简洁的方法可以使几个类(它们都从一个接口派生)执行相同的操作?想想在ASP.NET中为每个请求提供服务的http模块(每个是关键字) - 是否有一种方法可以在派生类型上执行一些常见操作?反射可能是一种方法,但我对基类级别的方法感兴趣。
谢谢

我原以为接口(或抽象类)的整个意义在于每个实现类都支持相同的公共方法。难道我错过了一份备忘录吗? - Aaronaught
Aaronaught:显然你没有,但有一种情况下自动调用某个方法作为初始化过程的一部分是很好的,尽管我认为这有点值得商榷。 - Noon Silk
6个回答

3

不仅需要一个接口;你需要在中间加入一个抽象类:

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

    protected abstract void PreDo();
}

接着你调用Do方法,所有实现类型的PreDo方法会自动被优先调用。

(编辑:为了明确起见,我将Do方法设置为虚方法,这意味着如果你重新实现它,你应该首先调用base.Do(),以确保它实际上调用了父类方法)。


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.
   }
}

0
如果您的所有类都派生自一个共同的基类,您可以将这个逻辑放在您的共同基类中。

0

0

0
设计接口的总体目的是为两个组件提供协议并隐藏实现部分。接口作为一种通信媒介。而你所询问的似乎是具体的实现问题。这可以通过使用实用类(带有方法的单例)来进行清晰处理。我不建议在您当前的情况下使用抽象类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接