0
一個通用的基礎方法,我有下面的類:(FYI:我不能編輯基類)如何調用與TypeBuilder
public abstract class BaseClass
{
protected TOutput Convert<TInput, TOutput>(TInput input)
{
return (TOutput)System.Convert.ChangeType(input, typeof(TOutput));
}
}
什麼,我試圖建立,是一個動態的類型像這樣:
public class DynamicClass : BaseClass
{
public string Convert(int value)
{
return base.Convert<int, string>(value);
}
}
,我用它來構建動態式的方法,看起來是這樣的:
private MethodBuilder BuildConvertMethod(TypeBuilder typeBuilder)
{
var baseConvertMethod = typeof(BaseClass).GetMethod("Convert", BindingFlags.NonPublic | BindingFlags.CreateInstance | BindingFlags.Instance);
var baseConvertMethodInstance = baseConvertMethod.MakeGenericMethod(typeof(int), typeof(string));
var convertMethodBuilder = typeBuilder.DefineMethod("Convert", MethodAttributes.Public, typeof(string), new[] { typeof(int) });
var convertMethodILGenerator = convertMethodBuilder.GetILGenerator();
convertMethodILGenerator.Emit(OpCodes.Nop);
convertMethodILGenerator.Emit(OpCodes.Ldarg_0);
convertMethodILGenerator.Emit(OpCodes.Ldarg_1);
convertMethodILGenerator.Emit(OpCodes.Call, baseConvertMethodInstance);
convertMethodILGenerator.Emit(OpCodes.Ldloc_0);
convertMethodILGenerator.Emit(OpCodes.Ret);
return convertMethodBuilder;
}
類型SUCC的創建電火工品。 但是,當我創建DynamicClass的一個實例,然後調用轉換方法,我得到以下異常:
System.Reflection.TargetInvocationException:異常已通過調用的目標引發異常。 ----> System.InvalidProgramException:公共語言運行時檢測到無效的程序。
有人可以幫我解決這個問題嗎?
非常感謝。它馬上工作。 :-) –