2009-12-28 133 views
7

我有一个类,在这个类内部是一个私有方法和许多公共方法。这个私有方法必须在每次调用其他方法之前调用。每次调用任何其他方法之前调用方法

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

+2

你会喜欢与我们分享您的代码?这可能是一个设计问题... – 2009-12-28 11:45:25

+0

我同意@Steve,这看起来像一个设计问题。根据我的经验,如果某些东西感觉不对,或者觉得自己在折磨一种标准的做法,那么您应该重新评估整体设计,因为您可能会引入代码异味。例如。您每次扩展API时都必须记得调用此方法 - 如果您忘记了该怎么办?没有编译器警告,并且在那里等待定时炸弹异常。话虽如此,我也同意AOP可能成为这里的答案。 – 2016-10-25 14:09:14

回答

10

你也许可以在这里用AOP做些什么,或许通过PostSharp;但unles你会这样做地段,我会主张保持简单,只需添加额外的代码。

当然,它变得更加复杂,如果你需要多态性与需要覆盖仍然调用方法第一(可能涉及公共非虚方法和受保护的虚拟方法):

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

啊......在C#中编译时元编程。这将是一个美好的一天,当它到达。 – LBushkin 2009-12-28 16:12:53

5

这是aspect oriented programming的典型案例。据我所知,在.NET中没有简单的方法来做到这一点(除了使用字节码增强或在运行时创建派生类,这两者都不容易,有些库在做,比如spring.net。不知道你是否真的需要这个。)

我会尽量避免这种情况几乎所有成本 - 或者如果真的没有其他的方式调用这个方法。