C#:在其他方法中包装方法

rpk*_*lly 5 c# perl aop moose

有没有办法在C#中透明地包装其他方法中的方法?我希望实现Moose围绕功能所做的工作:http://search.cpan.org/perldoc?Moose :: Manual :: MenodModifiers

编辑:透明,我的意思是不修改原始方法.

Joe*_*ham 4

我认为您正在寻找所谓的面向方面编程。有许多 C# 库可以帮助解决此问题。一种称为PostSharp(PostSharp 的免费版本支持此功能)。这是一个与驼鹿示例类似的示例。这将创建一个跟踪属性,您可以在其他方法上使用该属性来附加此额外功能:

[Serializable]
public class TraceAttribute : OnMethodBoundaryAspect
{

    public override void OnEntry( MethodExecutionArgs args )
    {
        Trace.WriteLine("about to call method");
    }

    public override void OnExit(MethodExecutionArgs args) 
    { 
       Trace.WriteLine("just finished calling method"); 
    }
 }
Run Code Online (Sandbox Code Playgroud)

您可以通过在方法“Foo”之前放置 Trace 属性来将其添加到方法“Foo”中:

[Trace]
public void Foo() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

现在,当 Foo 执行时,上面的 OnEntry 方法将在其之前运行,OnExit 将在其之后运行。