是否可以编写这样的代码?
public void DoSomeOperation().Log()
{
}.Log()
在进入DoSomeOperation方法并退出方法时,上面的调用将执行Log()函数。我能做那样的事吗?我知道我可以在这里使用AOP但不使用AOP,.NET是否会提供这种奢侈品?
答案 0 :(得分:3)
我错过了什么,或者它不会看起来像这样?
public void DoSomeOperation()
{
Log();
// Rest of method body
Log();
}
如果您要将Log()
次调用添加到现有的DoSomeOperation()
方法,则可能只是覆盖它,如果它是虚拟的:
public override void DoSomeOperation()
{
Log();
base.DoSomeOperation();
Log();
}
或者更好的是使用包装器方法并传入相应方法as LukeH suggests的委托。
至于使用Log()
调用实际装饰类中的每个方法调用,我不相信C#提供了这样的功能。不管怎样,不是我所知道的。
答案 1 :(得分:3)
LogWrapper(DoSomeOperation);
LogWrapper(() => DoSomeOtherOperation(42));
LogWrapper(() => AndAnother("example"));
// ...
public static void LogWrapper(Action action)
{
Log();
action();
Log();
}
答案 2 :(得分:0)
不,那是不可能的。你必须这样写:
public void DoSomeOperation()
{
Log();
// ....
Log();
}
答案 3 :(得分:0)
我只能推荐你PostSharp和logging aspect。