在类的所有方法之前运行方法

WoF*_*gel 23 c# reflection

是否有可能在C#3或4中做到这一点?也许有一些反思?

class Magic
{

    [RunBeforeAll]
    public void BaseMethod()
    {
    }

    //runs BaseMethod before being executed
    public void Method1()
    {
    }

    //runs BaseMethod before being executed
    public void Method2()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

有一个替代解决方案,做Magic一个单例并将您的代码放在静态实例的getter上.这就是我做的:

public class Magic
{

    private static Magic magic = new Magic();
    public static Magic Instance
    {
        get
        {
            magic.BaseMethod();
            return magic;
        }
    }

    public void BaseMethod()
    {
    }

    //runs BaseMethod before being executed
    public void Method1()
    {
    }

    //runs BaseMethod before being executed
    public void Method2()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

你不能在C#中自动执行此操作 - 你应该看看AOP,例如使用PostSharp.


WoF*_*gel 10

有一个替代解决方案,使Magic成为单例并将您的代码放在静态实例的getter上.这就是我所做的.

public class Magic{

private static Magic magic;
public static Magic Instance{
  get
    {
   BaseMethod();
    return magic;
    }
}

public void BaseMethod(){
}

//runs BaseMethod before being executed
public void Method1(){
}

//runs BaseMethod before being executed
public void Method2(){
}
}
Run Code Online (Sandbox Code Playgroud)

  • 你可以做一个懒惰的初始化,即在访问之前检查是否为null(通常只是第一次).如果是,就实现它. (2认同)