2010-01-26 21 views
4

是否有一个简洁的方法来创建几个类(从一个接口派生),以便每个类执行相同的操作?想想服务于每个请求的ASP.NET模块中的http模块(每个关键字) - 是否有一种方法可以对派生类型执行一些常见操作?反思可能是一种方式,但我会对基础级别的方式感兴趣。在派生类型上执行通用操作

感谢

+0

我认为接口(或抽象类)的全部观点是每个实现类都支持相同的常用方法。我错过了一个备忘录吗? – Aaronaught 2010-01-26 23:39:49

+0

Aaronaught:显然你没有,但是有一种情况下,有一种方法会自动为你调用,作为init进程的一部分。虽然我同意这有点可疑。 – 2010-01-26 23:42:07

回答

0

如果你的类都来自一个共同的基类派生的,你可以把这个逻辑在公共基类。

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

设计的接口的总体点是提供两个组件之间的协议和隐藏实现的一部分。这些接口用作通信媒介。 你在问什么似乎是具体实施。 可以使用实用程序类(使用该方法的单例)来干净地处理它 我不建议在当前场景中使用抽象类。