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

标签 c# reflection

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

例如:

说我有这门课

public class Utility {

    public static void DoSomething(string data){
        //...
    }
}

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

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

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

最佳答案

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

public static void DoSomething(string data, Action<string> operation)
{
    operation(data);
}

当然,这是一个过于简单化的示例。您最终在自己的代码中执行的操作将取决于 operation 实际执行的操作。


如果您尝试修改现有的、编译的、生产中的方法的行为,并且不能以通常的方式重载或覆盖该方法,我知道的唯一方法是 CIL 重写,可能使用一个Aspect Weaver .

关于c# - 如何在运行时更改静态方法的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35635443/

相关文章:

c# - 动态获取 Func<T,bool> 调用的结果

c# - switch 语句保证顺序吗?

c# - 如何使用 System.Reflection.Emit 从 T 创建派生类型

c# - Blazor 测试 InputDate 与 bUnit 的绑定(bind)

Java 反射性能

go - 递归扩展包含指针的结构定义

c# - 允许按列 gridview 排序

c# - 通过反射或类似方式动态生成属性 getter/setter

java - 从 Class<? 中获取枚举实例使用字符串值扩展枚举>?

java - 反射和私有(private)本地方法