0
와 일반적인 기본 메소드를 호출하는 방법 :나는 다음과 같은 클래스가하는 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의 생성 eeds. 하지만 DynamicClass의 인스턴스를 생성 한 다음, 나는 다음과 같은 예외가 얻을 변환 메서드를 호출 할 때
System.Reflection.TargetInvocationException : 호출 대상이 예외가 발생되었습니다. ----> System.InvalidProgramException : 공용 언어 런타임에서 잘못된 프로그램을 감지했습니다.
누군가가이 문제에 대해 도움을 주시겠습니까?
고마워요. 바로 작동했습니다. :-) –