在调用任何其他方法之前每次调用一个方法

8

我有一个类,其中包含一个私有方法和许多公共方法。在调用任何其他方法之前,必须每次调用此私有方法。

最简单的方法是在每个方法中调用该方法,但我不喜欢这种方法。是否有其他方法可以实现此目的?


2
你想和我们分享你的代码吗?这可能是一个设计问题... - Steve De Caux
我同意@Steve的观点,这似乎是一个设计问题。根据我的经验,如果某些东西感觉不对,或者感觉像折磨标准操作方式一样,那么你应该重新评估整体设计,因为你很可能引入了代码异味。例如,每次扩展API时,您都必须记得调用此方法 - 如果您忘记了怎么办?没有编译器警告,并且在那里等待着时间炸弹异常。话虽如此,我也同意AOP可能是这里的解决方案。 - rory.ap
2个回答

10

你可能可以利用AOP,在此处完成一些操作,也许通过PostSharp; 但是,除非你要频繁地这样做,否则我建议保持简单,并仅添加额外的代码。

当然,如果你需要多态性并且需要覆盖仍然首先调用该方法(可能涉及公共非虚拟方法和受保护的虚拟方法),情况会变得更加复杂:

public void Foo() {
    Bar()
    FooCore();
}
protected virtual void FooCore() {...} // default Foo implementation
private void Bar() {...} // your special code

1
啊...C#的编译时元编程。当它到来的那一天将会是美好的。 - LBushkin

5
这是一个典型的面向切面编程案例。据我所知,在.NET中没有容易的方法来做到这一点(除了使用字节码增强或在运行时创建派生类,这都不容易)。有一些库可以做到这一点,比如spring.net。我不确定你是否真的需要这个。
我会尽可能避免这种情况 - 或者只有在没有其他方法时才调用这个方法。

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