有没有办法在运行时修改静态方法的行为?
例如:
说我有这门课
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.