可以给我一个方法的Extension方法吗
本文关键字:方法 一个 Extension | 更新日期: 2023-09-27 17:57:31
有可能写这样的代码吗?
public void DoSomeOperation().Log()
{
}.Log()
在进入DoSomeOperation方法和退出该方法时,上述调用将执行Log()函数。我能做这样的事吗?我知道我可以在这里使用AOP,但如果不使用AOP,.NET会给这种奢侈吗?
LogWrapper(DoSomeOperation);
LogWrapper(() => DoSomeOtherOperation(42));
LogWrapper(() => AndAnother("example"));
// ...
public static void LogWrapper(Action action)
{
Log();
action();
Log();
}
我是错过了什么,还是不是看起来像这样?
public void DoSomeOperation()
{
Log();
// Rest of method body
Log();
}
如果您想将Log()
调用添加到现有的DoSomeOperation()
方法中,那么如果它是虚拟的,您可能只需要像这样覆盖它:
public override void DoSomeOperation()
{
Log();
base.DoSomeOperation();
Log();
}
或者最好使用包装器方法,并按照LukeH的建议传入相应方法的委托。
至于用Log()
调用来装饰类中的每个方法调用,我不认为C#提供了这样的功能。无论如何,据我所知,不是这样。
不,这是不可能的。你必须这样写:
public void DoSomeOperation()
{
Log();
// ....
Log();
}
我只能向您推荐PostSharp和日志方面。