我需要在运行时创建具有属性的类型。类型必须如下所示:
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);
但是当我尝试为属性设置值时,抛出异常