Reflection.Emit 创建 属性
Reflection.Emit create property
如何使用反射创建 Property1?
public IProp Property1
{
get
{
return new TestClass(TestMethod);
}
}
private void TestMethod()
{
...
}
我在努力
var propertyBuilder = typeBuilder.DefineProperty("Property1",
PropertyAttributes.None, typeof(IProp), Type.EmptyTypes);
propertyBuilder.SetGetMethod(GenerateGetter(typeBuilder, testMethodInfo));
MethodBuilder GenerateGetter(TypeBuilder typeBuilder, MethodInfo TestMethod)
{
var getterBuilder = typeBuilder.DefineMethod(TestMethod.Name,
METHOD_ATTRIBUTES, TestMethod.ReturnType, Type.EmptyTypes);
var actionCtor = typeof(Action).GetConstructors().Single();
var testClassCtor = typeof(TestClass).GetConstructor(new[] { typeof(Action) });
var il = getterBuilder.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldftn, TestMethod);
il.Emit(OpCodes.Newobj, actionCtor);
il.Emit(OpCodes.Newobj, testClassCtor);
il.Emit(OpCodes.Ret);
return getterBuilder;
}
但我有 System.Reflection.TargetException(对象与目标类型不匹配)。我想我有错误,因为我的 IL 代码是错误的。
我换了
var getterBuilder = typeBuilder.DefineMethod(TestMethod.Name,
METHOD_ATTRIBUTES, TestMethod.ReturnType, Type.EmptyTypes);
至
var getterBuilder = typeBuilder.DefineMethod(TestMethod.Name,
METHOD_ATTRIBUTES, typeof(IProp), Type.EmptyTypes);
如何使用反射创建 Property1?
public IProp Property1
{
get
{
return new TestClass(TestMethod);
}
}
private void TestMethod()
{
...
}
我在努力
var propertyBuilder = typeBuilder.DefineProperty("Property1",
PropertyAttributes.None, typeof(IProp), Type.EmptyTypes);
propertyBuilder.SetGetMethod(GenerateGetter(typeBuilder, testMethodInfo));
MethodBuilder GenerateGetter(TypeBuilder typeBuilder, MethodInfo TestMethod)
{
var getterBuilder = typeBuilder.DefineMethod(TestMethod.Name,
METHOD_ATTRIBUTES, TestMethod.ReturnType, Type.EmptyTypes);
var actionCtor = typeof(Action).GetConstructors().Single();
var testClassCtor = typeof(TestClass).GetConstructor(new[] { typeof(Action) });
var il = getterBuilder.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldftn, TestMethod);
il.Emit(OpCodes.Newobj, actionCtor);
il.Emit(OpCodes.Newobj, testClassCtor);
il.Emit(OpCodes.Ret);
return getterBuilder;
}
但我有 System.Reflection.TargetException(对象与目标类型不匹配)。我想我有错误,因为我的 IL 代码是错误的。
我换了
var getterBuilder = typeBuilder.DefineMethod(TestMethod.Name,
METHOD_ATTRIBUTES, TestMethod.ReturnType, Type.EmptyTypes);
至
var getterBuilder = typeBuilder.DefineMethod(TestMethod.Name,
METHOD_ATTRIBUTES, typeof(IProp), Type.EmptyTypes);