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

时间:2014-06-06 20:45:32

标签: c# cil

我正在创建一个类,在CallerClass中调用CallerClass和方法覆盖

CallerClass重写方法(来自其基类)需要为另一个类调用构造函数或方法,将其称为OtherClass,但我不知道它在运行时是哪个类。

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

如何执行覆盖?

1 个答案:

答案 0 :(得分:0)

如果Reflection真的不适合您的需求,您可以通过IL Weaving覆盖/扩展方法。我可以建议的一个工具是事后的想法: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
                }
            });
    }
}