有没有一种简洁的方法可以使几个类(它们都从一个接口派生)执行相同的操作?想想在ASP.NET中为每个请求提供服务的http模块(每个是关键字) - 是否有一种方法可以在派生类型上执行一些常见操作?反射可能是一种方法,但我对基类级别的方法感兴趣。
谢谢
谢谢
不仅需要一个接口;你需要在中间加入一个抽象类:
abstract class Whatever : IFooable {
public virtual void Do () {
PreDo();
}
protected abstract void PreDo();
}
接着你调用Do
方法,所有实现类型的PreDo
方法会自动被优先调用。
(编辑:为了明确起见,我将Do
方法设置为虚方法,这意味着如果你重新实现它,你应该首先调用base.Do()
,以确保它实际上调用了父类方法)。
如果我正确理解了你的问题,那么也许事件处理程序是一个不错的选择?
如果您需要一堆对象响应某个动作,则事件(也称为“消息传递”)是正确的方法。
类似这样的吗?
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.
}
}
可能不是完整的答案,但我倾向于从AOP和属性的角度思考。
一些参考资料:
http://www.codeproject.com/KB/cs/ps-custom-attributes-1.aspx
http://www.postsharp.org/contributions/documentation/removing-duplicate-code-in-functions