C#中的函数装饰器
有没有类似于Python中函数装饰器的C#用法?我觉得可以通过属性和反射框架来实现,但我找不到在运行时替换函数的方法。
Python装饰器通常是这样工作的:
class decorator(obj):
def __init__(self, f):
self.f = f
def __call__(self, *args, **kwargs):
print "Before"
self.f()
print "After"
@decorator
def func1():
print "Function 1"
@decorator
def func2():
print "Function 2"
调用func1和func2会得到
Before Function 1 After Before Function 2 After
这个想法是,装饰器可以让我在多个函数的入口和出口轻松添加一些常见的任务。
3 个回答
4
你可以通过.NET框架中的“ContextBoundObject”来实现这个功能。 不过这个方法有点复杂,因为它实际上是利用了.NET的远程调用机制来拦截方法调用。如果你的调用是在同一个应用程序域内,但跨越了不同的“上下文”,那么运行时的开销是最小的。 所以,其他人提到的那些更好的方法可能更适合你。
9
你可以使用 Post Sharp 来实现这个功能。可以看看他们的演示视频,里面有详细的操作说明。
12
我实现这个的方式是通过一些叫做面向切面编程(AOP)的框架,比如Castle动态代理、Spring.NET,甚至还有策略注入应用块。