是否有一种简洁的方法可以创建多个类(也就是说从1个接口派生),每个类都执行相同的操作?想想ASP.NET中为每个请求提供服务的http模块(每个关键字) - 有没有办法对派生类型执行一些常见操作?反思可能是一种方式,但我会对基类级别的方式感兴趣。
由于
答案 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)
模板方法设计模式可能适用于您所要求的内容。
答案 5 :(得分:0)
设计接口的总体目标是在两个组件之间提供协议并隐藏实现部分。 接口用作通信介质。 而你所要求的似乎是具体的实施。 哪个可以使用实用程序类干净地处理(单例与方法) 我不建议在当前场景中使用抽象类。