使用ILgenerator重载方法,使用来自ArrayList字段的项数据

本文关键字:ArrayList 字段 数据 重载 ILgenerator 方法 使用 | 更新日期: 2023-09-27 18:07:21

我正在创建一个类,命名为CallerClass和CallerClass中的方法重写

CallerClass被覆盖的方法(从它的基类)需要调用另一个类的构造函数或方法,调用OtherClass,但我不知道这是哪个类在运行时。

OtherClass实例和构造函数或方法的参数存储在一个ArrayList中,该ArrayList是CallerClass的父类的一个字段。

如何执行重写?

使用ILgenerator重载方法,使用来自ArrayList字段的项数据

如果反射确实不能满足您的需求,您可以通过IL编织覆盖/扩展方法。我可以推荐的一个工具是Afterthought: https://github.com/vc3/Afterthought/wiki

在下面的例子中,我定义了一个修正CallerClassBase的所有子类的修正案——这是作为你的CallerClass

的基类引入的
class MyAmendment<T> : Amendment<T, T> where T : CallerClassBase
{
    public override void Amend(Method method)
    {
        method.Before(amended =>
            {
                if (amended.GetType() != typeof(CallerClassBase))
                {
                    // Implement your logic here
                }
            });
    }
}