C#中怎样实现类似Python中的装饰器( 二 )

执行结果:test for Actionfunction startdo some actionfunction endtest foc Funcfunction startdo some funcfunction endthe result is:13——————————————————————————————听起来可以根据面向切面的思想解决。\t\t\t\tProxyClass.Action(param =\u0026gt;\t\t\t\t{param.Method(data);\t\t\t\t});var result=ProxyClass.Func(param =\u0026gt;{return param.Method(data);});类似这种的可不可以?自己实现一个ProxyClass类,提供无返回有泛型返回两个静态方法(想要的function start和function end都在这两个方法里处理),参数是一个委托。在调用时可以直接调这两个方法,然后在委托参数里调用function。或者可以参考一下Attribute【特性】,给相关方法打上自定义的特性,然后在调用时统一处理。
■网友
请搜索.Net下的AOP框架,比如 Castle Windsor - https://github.com/castleproject/Windsor/blob/master/docs/README.md
■网友
using System;using Castle.DynamicProxy;namespace ConsoleApp1{ public class Program { public static void Main(string args) { ProxyGenerator proxy = new ProxyGenerator(); Interceptor interceptor=new Interceptor(); var handler = proxy.CreateClassProxy\u0026lt;Program\u0026gt;(interceptor); handler.DoSomething(); Console.ReadKey(); } public virtual void DoSomething() { Console.WriteLine("Do Something"); } public class Interceptor : IInterceptor { public void Intercept(IInvocation invocation) { Console.WriteLine("Function Start"); try { invocation.Proceed(); } catch (Exception) { Console.WriteLine("Target threw an exception!"); throw; } finally { Console.WriteLine("Function End"); } } } }}


推荐阅读