C# 对派生类型执行公共操作
有没有一种简洁的方法可以让几个类(比如派生自1个接口)各自执行相同的操作?想想ASP.NET中为每个请求(每个请求都是关键字)提供服务的http模块——有没有办法对派生类型执行一些常见操作?反射可能是一种方式,尽管我对基类级别的方式感兴趣C# 对派生类型执行公共操作,c#,C#,有没有一种简洁的方法可以让几个类(比如派生自1个接口)各自执行相同的操作?想想ASP.NET中为每个请求(每个请求都是关键字)提供服务的http模块——有没有办法对派生类型执行一些常见操作?反射可能是一种方式,尽管我对基类级别的方式感兴趣 谢谢如果您的类都派生自一个公共基类,那么您可以将此逻辑放在公共基类中。不仅仅是一个接口;你想在中间有一个抽象类: abstract class Whatever : IFooable { public virtual void Do () {
谢谢如果您的类都派生自一个公共基类,那么您可以将此逻辑放在公共基类中。不仅仅是一个接口;你想在中间有一个抽象类:
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和属性的角度来思考 一些参考资料:
模板方法设计模式可能适用于您的要求
设计接口的总体要点是在两个组件之间提供协议,并隐藏实现部分。 这些接口用作通信媒介。 您所要求的似乎是特定于实现的。 可以使用实用程序类(使用该方法的单例)干净地处理
我不建议在当前场景中使用抽象类。我认为接口(或抽象类)的全部要点是每个实现类都支持相同的通用方法。Aaronaught:很明显你没有,但是有一种情况是,在某些初始化过程中,自动为你调用一个方法是很好的。虽然我同意这有点奇怪。