0
我需要在运行时创建具有属性的类型。 类型必须是这个样子:在运行时生成类型
public class RunTimeType : BaseType
{
private string _field1;
public string Property1
{
get { return _field1; }
set
{
if (_field1 != value)
{
_field1 = value;
OnAfterPropertySet("Property1");
}
}
}
}
的问题是如何创造Set方法?现在我用如下因素代码:
var propertyName = "Property1";
var onAfterPropertySet = baseType.GetMethod("OnAfterPropertySet",
BindingFlags.Instance | BindingFlags.InvokeMethod |
BindingFlags.NonPublic, null, new[] { typeof(string) },
null);
ILGenerator currSetIL = currSetPropMthdBldr.GetILGenerator();
currSetIL.Emit(OpCodes.Ldarg_0);
currSetIL.Emit(OpCodes.Ldarg_1);
currSetIL.Emit(OpCodes.Stfld, field);
currSetIL.Emit(OpCodes.Ldstr, propertyName);
currSetIL.Emit(OpCodes.Call, onAfterPropertySet);
currSetIL.Emit(OpCodes.Pop);
currSetIL.Emit(OpCodes.Ret);
但是当我试图值设置为属性,异常呼吁onAfterPropertySet
为this
参数之前抛出
什么你想完成?生成IL很少是最好的解决方案。 – SLaks 2010-11-08 21:33:34
你会得到什么例外? – SLaks 2010-11-08 21:34:13
我得到TargetInvocationException – Timur 2010-11-08 21:36:44