IL:如何生成特定的C#函数?

时间:2014-03-19 04:08:56

标签: c# dynamic il

我需要动态生成这样的类:

public class SomeProxyClass
{
    public Action<some_vars> ActionName;
    public rettype InvokeActionName(some_vars)
    {
        if(this.ActionName != null)
        {
            return this.ActionName(some_vars);
        }
        return default(rettype);
    }
}
public class SomeClass
{
    public static SomeProxyClass parentProxy;
    public static rettype ActionName(some_vars)
    {
        this.parentProxy.InvokeActionName(some_vars);
    }
}

我的主要问题是我不知道如何用IL指令生成这么简单的方法,所以我正在寻找你的帮助! 提前谢谢!

2 个答案:

答案 0 :(得分:1)

注意:Action不会返回值。因此,如果您希望返回值,return this.ActionName(some_vars)将无效。

这是我想出的,希望它有所帮助:)。

public class SomeProxyClass<I,O>
{
    public Func<I, Nullable<O>> ActionName;
    public Nullable<O> InvokeActionName(I value)
    {
        if(this.ActionName != null)
        {
            return this.ActionName(value);
        }
        return null;
    }
}

public class SomeClass
{
    public static SomeProxyClass<string, int> parentProxy = new SomeProxyClass<string, int>();
    public static int? ActionName(string value)
    {
        this.parentProxy.InvokeActionName(value);
    }
}

答案 1 :(得分:1)

如果要动态生成类,可以使用CodeDom或Reflection.Emit。 CodeDom动态创建C#代码然后编译它,而Reflection.emit为代码创建MSIL。如果你想在IL中编写,你可以像平常一样创建这个类,然后使用ILDASM.exe将你的类反编译成IL。既然您已经知道IL中的代码应该是什么样的,那么您可以使用Reflection.emit s ILGenerator`类动态生成类。有关分步流程,请参阅此文:http://www.codeproject.com/Articles/121568/Dynamic-Type-Using-Reflection-Emit

希望它对你有所帮助。