我需要动态生成这样的类:
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指令生成这么简单的方法,所以我正在寻找你的帮助! 提前谢谢!
答案 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
希望它对你有所帮助。