如何在运行时更改静态方法的行为?

tt9*_*tt9 2 c# reflection

有没有办法在运行时修改静态方法的行为?

例如:

说我有这门课

public class Utility {

    public static void DoSomething(string data){
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做这样的事情:

typeof(Utility).SetMethod("DoSomething", (data) => { /*Do something else...*/ });
Run Code Online (Sandbox Code Playgroud)

如果你调用Utility.DoSomething它执行新代码?

Rob*_*vey 10

您要做的是将您想要的行为作为另一个参数传递给函数.

public static void DoSomething(string data, Action<string> operation)
{
    operation(data);
}
Run Code Online (Sandbox Code Playgroud)

当然,这是一个过于简单的例子.你实际上在你自己的代码中做的事情将取决于operation实际做什么.


如果您正在尝试修改现有的,已编译的in-production方法的行为,并且不能以通常的方式重载或覆盖该方法,我知道这样做的唯一方法是CIL重写,可能使用Aspect Weaver.