【发布时间】:2016-03-11 03:30:16
【问题描述】:
我有一个类,其中每个方法都以相同的方式开始:
internal class Foo {
public void Bar() {
if (!FooIsEnabled) return;
//...
}
public void Baz() {
if (!FooIsEnabled) return;
//...
}
public void Bat() {
if (!FooIsEnabled) return;
//...
}
}
有没有一种很好的方法来要求(希望不要每次都写)类中每个公共方法的FooIsEnabled 部分?
我检查了Is there an elegant way to make every method in a class start with a certain block of code?,但这个问题是针对 Java 的,它的答案是使用 Java 库。
【问题讨论】:
-
你可以在运行时使用 DynamicProxy 之类的东西来编织它。
-
答案与 Java 单方面编程(例如 PostSharp)或动态代理几乎相同。或者当然,代码生成——只需制作一个简单的 T4 模板,在编译时生成代理。
-
甚至还有 Fody 作为替代方案...编译后修改程序集。请注意,.NET 没有语言内
java.lang.reflect.Proxy -
现在更重要的是,您为什么要这样做以及采用哪种解决方案?您正在使用的平台中可能有内置解决方案。
-
您可能需要考虑多态解决方案。提取一个通用接口并提供两个实现:一个 (
Foo) 执行函数中的代码,另一个 (FooDisabled) 仅提供没有主体的虚拟方法实现。然后,您可以在特定情况下实例化您需要的那个。
标签: c#