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

C# 每次在调用任何其他方法之前调用一个方法,c#,.net,C#,.net,我有一个类,在这个类中有一个私有方法和许多公共方法。每次调用任何其他方法之前都必须调用此私有方法 最简单的方法是在每个方法中调用该方法,但我不喜欢这种方法。有没有其他方法可以做到这一点 这是一个典型的家庭暴力案例。据我所知,在.NET中没有简单的方法可以做到这一点(除了在运行时使用字节码增强或创建派生类,这两种方法都不容易。例如,有一些库可以做到这一点。我不确定您是否真的需要它。) 我会不惜一切代价尝试避免这种情况——或者如果真的没有其他方法,我会调用这种方法。您可能可以通过AOP在这里做一些事

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

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

这是一个典型的家庭暴力案例。据我所知,在.NET中没有简单的方法可以做到这一点(除了在运行时使用字节码增强或创建派生类,这两种方法都不容易。例如,有一些库可以做到这一点。我不确定您是否真的需要它。)


我会不惜一切代价尝试避免这种情况——或者如果真的没有其他方法,我会调用这种方法。

您可能可以通过AOP在这里做一些事情,可能是通过;但是如果你不打算这么做,我会支持保持它的简单,只需添加额外的代码

当然,如果您需要多态性,并且需要重写来仍然首先调用方法(可能涉及公共非虚拟方法和受保护的虚拟方法),那么它会变得更加复杂:


你想和我们分享你的代码吗?这可能是一个设计问题……我同意@Steve的观点,这看起来像是一个设计问题。根据我的经验,如果某件事情感觉不对劲,或者感觉你在折磨一种标准的做事方式,那么你应该重新评估你的总体设计,因为你很可能会引入一种代码味道。例如,每次扩展API时,您都必须记住调用此方法——如果您忘记了怎么办?没有编译器警告,并且有一个定时炸弹异常正在等待。话虽如此,我也同意AOP可能是通往这里的道路的答案。啊。。。C#中的编译时元编程。那将是一个美好的一天。
public void Foo() {
    Bar()
    FooCore();
}
protected virtual void FooCore() {...} // default Foo implementation
private void Bar() {...} // your special code